【随笔记】Android 命令行联网、更新DNS、同步网络时间
一、命令行联网
# 启用网卡
busybox ifconfig wlan0 up
# 启用服务
wpa_supplicant -iwlan0 -Dnl80211 -c/system/etc/wifi/wpa_supplicant.conf &
# 连接网络 (add_network 指令会返回一个序号,这里假设返回的为 0)
wpa_cli -p /data/misc/wpa_supplicant -i wlan0 status
wpa_cli -p /data/misc/wpa_supplicant -i wlan0 add_network
wpa_cli -p /data/misc/wpa_supplicant -i wlan0 set_network 0 ssid \"wifi名字\"
wpa_cli -p /data/misc/wpa_supplicant -i wlan0 set_network 0 psk \"wifi密码\"
wpa_cli -p /data/misc/wpa_supplicant -i wlan0 enable_network 0
# 分配地址
dhcpcd wlan0 &
二、更新 DNS
# 设置 DNS
ndc resolver setdefaultif wlan0
ndc resolver setifdns wlan0 "" 202.96.128.166
需要保证 service netd /system/bin/netd 服务要被启动,不然 ndc 命令无法设置。
三、同步网络时间
# 设置时区
setprop persist.sys.timezone "Asia/Shanghai"
# 同步时间(ntpclient 需要另行编译)
ntpclient -s -c 1 -h ntp7.aliyun.com -i 3
网络上流传最多的方案:
可以使用 busybox 子命令 rdate 来实现同步网络时间,但是 Android 的 busybox 是精简版的,并没有 rdate 命令的实现(实际有对应的源码,只是编译配置没有启用 rdate),可以从 busybox 官方网下载最新源码进行编译,或者使用已被编译好的 busybox ,通过 busybox rdate -s 132.163.96.6 实现网络时间同步。
实测效果并不理想,首先 rdate 不支持域名解析,其次大概率会出现同步失败的情况,甚至会出现同步时间错误的情况。
我自己选择方案是自己编译 ntpclient ,折腾了半天,才发现 NDK 没有 adjtime() 实现,因此原生的 ntpclient 源码是无法通过 NDK 编译的。
最终的解决方案: