第二章:日志抓取方法——Android端抓取方法
各位好,我是老张。今天咱们聊聊Android端怎么抓日志。说实话,这活儿看着简单,但坑不少。我见过太多工程师拿着半截日志来问我,结果一看,关键信息全没抓到。
Android端抓日志,主要有三条路:adb logcat、bugreport,还有芯片厂商自己的工具。咱们一条一条说。
2.1 adb logcat:最基础的抓取方式
adb logcat是Android调试桥的标准日志输出。说白了,就是把系统里所有进程的日志都吐出来。但这里有个问题——信息太多,反而找不到重点。
我个人习惯,先清空缓存再抓:
adb logcat -c
adb logcat -v threadtime > wifi_log.txt
为什么要加-v threadtime?因为默认格式不带时间戳和线程ID。你想想看,排查WiFi断连问题时,没有时间戳,你怎么知道哪个事件先发生?
过滤技巧:
- 只看WiFi相关:
adb logcat -s "wpa_supplicant" "WifiStateMachine" - 蓝牙相关:
adb logcat -s "BluetoothAdapter" "BtGatt" - 同时看多个tag:用空格隔开就行
wpa_supplicant和WifiStateMachine两个tag。前者管底层连接,后者管上层状态机。两者对照着看,问题定位快得多。
2.2 bugreport:系统级快照
bugreport比logcat更全面。它不光抓日志,还把系统配置、进程状态、网络信息都打包了。我把它比作「系统体检报告」。
抓取命令很简单:
adb bugreport bugreport.zip
解压后你会看到一堆文件。重点关注这几个:
- main_log:应用层日志,WiFi/蓝牙的框架层问题看这里
- system_log:系统服务日志,权限、驱动问题看这里
- dumpstate:系统状态快照,包括WiFi扫描结果、连接状态
2.3 芯片厂商工具:CYW工具与QCA工具
这里我要多说两句。Android原生日志有时候不够细,比如WiFi底层的固件日志、蓝牙的HCI日志,logcat根本看不到。这时候就得用芯片厂商的工具。
CYW工具(博通/赛普拉斯方案)
CYW工具主要抓WiFi芯片的固件日志。我记得有一次排查WiFi频繁断连,logcat里只看到"Disconnected"事件,但原因不明。用CYW工具一抓,发现是固件里报了一个"Beacon loss"错误——原来是AP端信号不稳定。
使用方法:
# 开启固件日志
adb shell "echo 1 > /sys/kernel/debug/cyw_wl/dongle_dump"
# 抓取日志
adb logcat -s "CYW" > cyw_log.txt
QCA工具(高通方案)
高通方案的工具叫diag_mdlog,抓的是更底层的WiFi/蓝牙日志。说实话,这工具我第一次用的时候也懵——输出全是十六进制数据,看不懂。
后来发现,需要配合高通自己的解析工具(QXDM)才能看懂。但有个取巧的办法:
# 开启QCA日志
adb shell "echo 1 > /sys/kernel/debug/ipanic/debug_level"
# 抓取内核日志
adb shell dmesg > qca_kernel_log.txt
经验之谈: 如果你不确定设备用的是CYW还是QCA方案,可以查/proc/net/wireless文件。里面会显示驱动名称。我见过不少工程师拿错工具,白忙活半天。
2.4 Sniffer抓包:无线空口分析
Sniffer抓包,说白了就是监听空中的无线信号。这招最狠,因为你能看到AP和手机之间到底在传什么。
硬件上,我推荐用Wireshark配合支持监听模式的网卡。软件上,Windows用Wireshark,macOS用tcpdump。
抓包要点:
- 信道要对:手机连的是哪个信道,Sniffer就得设成哪个信道
- 过滤条件:只抓目标设备的MAC地址,不然数据量太大
- 时间同步:抓包前先同步手机和电脑的时间,方便对照
# macOS下抓包示例
sudo tcpdump -i en0 -e -s 0 -w wifi_capture.pcap
# 过滤特定MAC地址
sudo tcpdump -i en0 -e -s 0 -w wifi_capture.pcap ether host AA:BB:CC:DD:EE:FF
2.5 实战建议:怎么选工具?
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| WiFi连接失败 | logcat + bugreport | 看上层状态机,快速定位 |
| WiFi频繁断连 | CYW/QCA工具 + Sniffer | 看底层固件和空口信号 |
| 蓝牙配对异常 | logcat + bugreport | 看HCI日志和协议栈状态 |
| 蓝牙音频卡顿 | Sniffer + 厂商工具 | 看空口丢包和重传 |
嗯,总结一下。Android端抓日志,核心就四个字:对症下药。别一上来就开Sniffer,也别只盯着logcat。根据问题现象,选对工具,才能事半功倍。
下一章,咱们聊聊iOS端的抓取方法。说实话,iOS比Android封闭得多,但也不是没办法。到时候我分享几个实战中摸索出来的偏方。