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 相关日志被裁剪。

二、方法流程:从源码到可调试设备

整体流程可以概括为“下载 → 编译 → 刷机 → 连接 → 调试”五步。下图展示了各环节的输入、输出与关键工具,便于建立全局认知。

AOSP 系统服务调试环境搭建链路 1. 源码下载 repo init / sync 分支:android-14 约 100GB+ 2. 编译 source build/envsetup.sh lunch aosp_arm64-userdebug make -j8 3. 刷机 fastboot flashall boot / system / vendor fastboot reboot 4. 连接 adb devices adb root / remount adb shell 5. 调试 logcat dumpsys gdb 模拟器调试环境 emulator -avd Pixel_API_34 优点:启动快、可快照、易回滚 缺点:无真实 HAL、无真实功耗 适用:framework 层逻辑验证 adb connect localhost:5555 可配合 -writable-system 改 system 真机调试环境 fastboot devices / adb devices 优点:真实 HAL、真实传感器、真实功耗 缺点:刷机有风险、需解锁 bootloader 适用:稳定性、ANR、Watchdog 复现 adb root && adb remount 保留 stock 镜像以便回滚

三、关键命令与配置清单

下面给出从下载到调试的最小命令集,建议按顺序执行并记录每一步的输出,便于排障。

# 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 定位阻塞点。整个过程中,模拟器负责快速迭代,真机负责最终确认,两者互补。

建议为每台真机保留一份 stock 镜像与分区备份。刷机前执行 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。
刷机与解锁 bootloader 会清除设备数据,务必提前备份。部分厂商设备解锁后可能失去保修,请在合规范围内操作。