20、WiFi诊断与调试:常用adb命令、日志抓取与问题排查
做WiFi开发,最怕什么?
怕的是功能写好了,一跑就崩。更怕的是,崩了还不知道为什么崩。
我刚开始接触WiFi调试那会儿,也踩过不少坑。有一次,用户反馈WiFi连上了但上不了网,我查了半天代码,最后发现是DNS配置没生效。嗯,从那以后,我就养成了一个习惯——先看日志,再动代码。
这一章,我就把WiFi诊断和调试的常用手段,掰开了揉碎了讲给你听。
核心观点:WiFi调试不是靠猜的,是靠日志和命令说话的。掌握好adb命令和日志分析,你就能在问题面前游刃有余。
20.1 常用adb命令:dumpsys wifi 和 dumpsys netstats
adb命令是Android调试的瑞士军刀。我个人最常用的两个,就是 dumpsys wifi 和 dumpsys netstats。
20.1.1 dumpsys wifi
这个命令能输出WiFi模块的当前状态。说白了,就是WiFi的“体检报告”。
adb shell dumpsys wifi
输出内容很多,我一般重点关注这几个部分:
- Wi-Fi State:当前WiFi是否启用,连接状态如何。
- Network Info:当前连接的SSID、BSSID、IP地址、网关等。
- Scan Results:最近一次扫描到的AP列表。
- Client Interface:客户端接口的状态,比如是否正在关联、认证。
举个例子,有一次用户说WiFi连上了但信号弱。我跑了一下 dumpsys wifi,发现RSSI值只有-85 dBm。嗯,这信号确实差,建议用户靠近路由器试试。
小技巧:如果你只想看WiFi连接状态,可以加个过滤:adb shell dumpsys wifi | grep -i "state"。这样输出更清爽。
20.1.2 dumpsys netstats
这个命令用来查看网络流量统计。WiFi连上了,但数据走不走WiFi?这个命令能告诉你答案。
adb shell dumpsys netstats
我重点关注:
- WiFi 接口的流量:看看有没有数据收发。
- UID 流量统计:哪个App在偷跑流量,一目了然。
我记得有一次,用户说WiFi连上了但微信发不出消息。我查了 dumpsys netstats,发现微信的UID流量全走的是移动数据。原来是App的网络策略配置错了。
注意:dumpsys netstats 的输出在Android 10以上版本有所变化。如果你用的是新系统,记得先看看官方文档。
20.2 WiFi日志抓取与分析
日志是调试的灵魂。没有日志,你就像在黑暗中摸索。
20.2.1 抓取WiFi日志
我一般用两种方式抓日志:
- 实时抓取:
adb logcat -b all | grep -i wifi - 保存到文件:
adb logcat -b all -d > wifi_log.txt
你想想看,如果问题复现了,实时抓取能帮你看到现场。如果问题已经发生,那就用保存到文件的方式,回头慢慢分析。
20.2.2 日志分析要点
拿到日志后,我一般按这个顺序排查:
| 日志关键词 | 含义 | 常见问题 |
|---|---|---|
WifiStateMachine |
WiFi状态机日志 | 连接断开、认证失败 |
WifiMonitor |
WiFi事件监控 | 扫描结果、连接事件 |
Supplicant |
wpa_supplicant日志 | 认证过程、密钥协商 |
DhcpClient |
DHCP客户端日志 | IP获取失败、租约问题 |
我曾经遇到过一个奇葩问题:WiFi连上了,但每隔几分钟就断一次。查了半天日志,发现是 DhcpClient 一直在续租,但路由器不响应。最后换了台路由器就好了。
我的习惯:日志里看到 E/ 开头的行,先别慌。有些错误是正常的,比如扫描时找不到AP。重点看 FATAL 和 WTF 级别的日志。
20.3 常见问题排查
这里我总结几个高频问题,以及我的排查思路。
20.3.1 WiFi连不上
排查步骤:
- 先看
dumpsys wifi,确认WiFi是否启用。 - 看日志里有没有
ASSOC_REJECT或AUTH_FAILURE。 - 检查密码是否正确,尤其是企业级WiFi的证书配置。
我遇到过最坑的一次,是用户把WiFi密码里的字母“O”输成了数字“0”。嗯,这种问题,日志里根本看不出来,只能靠人工核对。
20.3.2 WiFi连上了但没网
排查步骤:
- 用
ping 8.8.8.8测试网络连通性。 - 用
dumpsys netstats看流量是否走WiFi。 - 检查DNS配置:
getprop net.dns1。
说白了,就是确认三层和四层是否通。有一次,我发现ping不通,但 dumpsys wifi 显示IP地址是169.254.x.x。嗯,DHCP失败了,手动设置静态IP搞定。
20.3.3 WiFi频繁断开
排查步骤:
- 看日志里有没有
DISCONNECT事件。 - 检查信号强度,RSSI低于-80 dBm就容易断。
- 看看是不是省电模式在作怪。
我曾经在项目里遇到过,手机一锁屏WiFi就断。查了半天,是系统级的省电策略把WiFi给关了。嗯,这种问题,得跟系统团队沟通才能解决。
避坑指南:不要一上来就怀疑代码。先排除环境问题,比如路由器重启一下、换个位置试试。我曾经花了两天查一个WiFi断连问题,最后发现是路由器固件有bug。
20.4 知识体系总览
为了让你更直观地理解WiFi诊断与调试的流程,我画了一张图。
这张图把WiFi诊断的三大块串起来了。你从工具入手,拿到日志,再对照常见问题去排查,基本能解决90%的问题。
最后说一句:调试WiFi问题,耐心比技术更重要。有时候问题很简单,只是你漏看了一行日志。别急,慢慢来。
公众号:蓝海资料掘金营,微信deep3321