4. 调试环境搭建
要调试 Android 系统服务稳定性,第一步不是抓日志,而是拥有一套可编译、可刷写、可回滚、可远程调试的 AOSP 环境。系统服务运行在 system_server、zygote、HAL 与内核之间,很多崩溃、ANR、Watchdog、Binder 超时问题只有在自编译镜像上才能复现和定位。本节围绕源码、编译、刷机、adb/fastboot、模拟器与真机六条主线,给出一条可落地的环境搭建路径。
一、核心原理:为什么必须自建 AOSP 环境
官方 OTA 镜像只提供成品,无法插入调试桩、无法打开更多 log tag、无法替换单个系统服务模块。AOSP 环境的价值在于三点:其一,可对 frameworks/base/services 做增量编译,快速验证补丁;其二,可通过 userdebug 版本获得 root 与 adb root 能力,读取 /data/anr、/data/tombstones;其三,可配合 fastboot 刷入 boot、system、vendor 分区,实现“改一处、刷一处、验一处”的闭环。
userdebug 或 eng 版本,而非 user 版本。user 版本会关闭大量调试开关,导致 Watchdog、ANR、Binder 相关日志被裁剪。二、方法流程:从源码到可调试设备
整体流程可以概括为“下载 → 编译 → 刷机 → 连接 → 调试”五步。下图展示了各环节的输入、输出与关键工具,便于建立全局认知。
三、关键命令与配置清单
下面给出从下载到调试的最小命令集,建议按顺序执行并记录每一步的输出,便于排障。
# 1. 下载源码
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r1
repo sync -c -j8 --no-tags
# 2. 编译
source build/envsetup.sh
lunch aosp_arm64-userdebug
make -j8
# 3. 刷机(真机)
adb reboot bootloader
fastboot flashall -w
fastboot reboot
# 4. 连接与调试
adb devices
adb root
adb remount
adb shell dumpsys activity services
adb logcat -b all -v threadtime | grep -i watchdog
| 环节 | 核心工具 | 关键参数/命令 | 常见问题 |
|---|---|---|---|
| 源码下载 | repo / git | repo sync -c -j8 |
网络中断、磁盘不足 |
| 编译 | soong / make | lunch、make -j8 |
内存不足、ccache 未开 |
| 刷机 | fastboot | fastboot flashall -w |
bootloader 未解锁 |
| 连接 | adb | adb root、adb remount |
user 版本无法 root |
| 模拟器 | emulator | -writable-system |
无真实 HAL |
| 真机 | adb + fastboot | adb shell |
驱动未安装、授权未确认 |
四、案例场景:一次 Watchdog 复现的环境准备
假设要复现 system_server 中 Watchdog 超时问题。首先在模拟器上验证逻辑:启动 aosp_arm64-userdebug 模拟器,通过 adb shell setprop persist.sys.watchdog.debug 1 打开调试开关,观察 logcat -b system 中 Watchdog 线程输出。若模拟器无法复现,则切换到真机:解锁 bootloader,刷入自编译 userdebug 镜像,使用 adb root 后读取 /data/anr/traces.txt 与 /data/tombstones/,结合 dumpsys activity processes 定位阻塞点。整个过程中,模拟器负责快速迭代,真机负责最终确认,两者互补。
fastboot getvar all 记录设备信息,刷机后若无法开机,可通过 fastboot flash boot boot.img 单独回滚 boot 分区。五、误区与复盘
- 误区一:用 user 版本调试系统服务。user 版本关闭了 root 与大量调试日志,很多稳定性问题无法观测。应使用 userdebug 或 eng。
- 误区二:只依赖模拟器。模拟器缺少真实 HAL、传感器与功耗路径,Watchdog、ANR、Binder 超时在模拟器上可能不复现。
- 误区三:忽略 adb 授权与驱动。真机首次连接需在设备上确认 RSA 指纹,Windows 需安装对应 USB 驱动,否则
adb devices显示unauthorized或空列表。 - 误区四:刷机不备份。未保留 stock 镜像导致无法回滚,影响后续对比测试。
- 误区五:编译不开启 ccache。全量编译耗时过长,建议
export USE_CCACHE=1并设置CCACHE_DIR。