20、WiFi诊断与调试:常用adb命令、日志抓取与问题排查

做WiFi开发,最怕什么?

怕的是功能写好了,一跑就崩。更怕的是,崩了还不知道为什么崩。

我刚开始接触WiFi调试那会儿,也踩过不少坑。有一次,用户反馈WiFi连上了但上不了网,我查了半天代码,最后发现是DNS配置没生效。嗯,从那以后,我就养成了一个习惯——先看日志,再动代码。

这一章,我就把WiFi诊断和调试的常用手段,掰开了揉碎了讲给你听。

核心观点:WiFi调试不是靠猜的,是靠日志和命令说话的。掌握好adb命令和日志分析,你就能在问题面前游刃有余。

20.1 常用adb命令:dumpsys wifi 和 dumpsys netstats

adb命令是Android调试的瑞士军刀。我个人最常用的两个,就是 dumpsys wifidumpsys 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日志

我一般用两种方式抓日志:

  1. 实时抓取adb logcat -b all | grep -i wifi
  2. 保存到文件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。重点看 FATALWTF 级别的日志。

20.3 常见问题排查

这里我总结几个高频问题,以及我的排查思路。

20.3.1 WiFi连不上

排查步骤:

  1. 先看 dumpsys wifi,确认WiFi是否启用。
  2. 看日志里有没有 ASSOC_REJECTAUTH_FAILURE
  3. 检查密码是否正确,尤其是企业级WiFi的证书配置。

我遇到过最坑的一次,是用户把WiFi密码里的字母“O”输成了数字“0”。嗯,这种问题,日志里根本看不出来,只能靠人工核对。

20.3.2 WiFi连上了但没网

排查步骤:

  1. ping 8.8.8.8 测试网络连通性。
  2. dumpsys netstats 看流量是否走WiFi。
  3. 检查DNS配置:getprop net.dns1

说白了,就是确认三层和四层是否通。有一次,我发现ping不通,但 dumpsys wifi 显示IP地址是169.254.x.x。嗯,DHCP失败了,手动设置静态IP搞定。

20.3.3 WiFi频繁断开

排查步骤:

  1. 看日志里有没有 DISCONNECT 事件。
  2. 检查信号强度,RSSI低于-80 dBm就容易断。
  3. 看看是不是省电模式在作怪。

我曾经在项目里遇到过,手机一锁屏WiFi就断。查了半天,是系统级的省电策略把WiFi给关了。嗯,这种问题,得跟系统团队沟通才能解决。

避坑指南:不要一上来就怀疑代码。先排除环境问题,比如路由器重启一下、换个位置试试。我曾经花了两天查一个WiFi断连问题,最后发现是路由器固件有bug。

20.4 知识体系总览

为了让你更直观地理解WiFi诊断与调试的流程,我画了一张图。

WiFi诊断与调试知识体系 adb命令工具 日志抓取 问题排查 dumpsys wifi WiFi状态、连接信息 扫描结果、RSSI 客户端接口状态 dumpsys netstats 网络流量统计 UID流量分析 接口流量对比 日志分析 WifiStateMachine Supplicant/DhcpClient 错误级别判断 WiFi连不上 连上但没网 频繁断开 工具 → 日志 → 排查,三步搞定WiFi问题

这张图把WiFi诊断的三大块串起来了。你从工具入手,拿到日志,再对照常见问题去排查,基本能解决90%的问题。

最后说一句:调试WiFi问题,耐心比技术更重要。有时候问题很简单,只是你漏看了一行日志。别急,慢慢来。


公众号:蓝海资料掘金营,微信deep3321