如何测试调试本地AOSP构建修改并在模拟器运行?含全栈调试
本地构建AOSP并在模拟器运行的可行性与调试指南
可行性确认
完全可行。AOSP官方支持针对模拟器的构建目标,常见的aosp_x86_64-eng、aosp_arm64-eng等编译目标均适配模拟器环境,可直接构建出能在本地模拟器运行的系统镜像。
一、模拟器运行期间测试本地修改
根据修改层级的不同,可采用对应的测试方式:
- App层修改
- 自研App:直接通过
adb install -r app-debug.apk将编译后的APK覆盖安装到运行中的模拟器; - 系统内置App:重新编译对应模块(如
make Settings),通过adb remount后adb push替换/system/app/或/system/priv-app/下的目标APK,或执行make installclean后重新刷入系统镜像。
- 自研App:直接通过
- Framework层修改
- 编译Framework相关模块(如
make framework)生成新的system.img,重启模拟器时指定加载新镜像:emulator -system out/target/product/generic_x86_64/system.img; - 或通过
adb remount后,将编译生成的jar文件推送到/system/framework/目录,重启SystemUI(adb shell am restart com.android.systemui)或整个模拟器。
- 编译Framework相关模块(如
- HAL/Native层修改
- 编译对应Native模块(如
make libhardware)生成.so文件,adb remount后推送到/system/lib/或/system/lib64/对应目录,重启相关服务或模拟器即可生效。
- 编译对应Native模块(如
注:eng版本的AOSP系统默认开启root权限与调试模式,无需额外解锁即可修改系统分区。
二、构建产物中模拟器的位置
- 模拟器二进制文件:Linux环境下位于
out/host/linux-x86/bin/emulator;Windows/macOS环境对应路径为out/host/windows-x86/bin/emulator或out/host/darwin-x86/bin/emulator。 - 系统镜像文件:存储在
out/target/product/generic_x86_64/(以x86_64编译目标为例),核心镜像包括system.img、userdata.img、ramdisk.img等。
三、通过CLI或Android Studio启动模拟器
CLI方式
- 配置AOSP环境变量(可将该命令加入终端配置文件,避免每次重复执行):
source build/envsetup.sh lunch aosp_x86_64-eng - 直接启动模拟器:
常用附加参数:emulatoremulator -system out/target/product/generic_x86_64/system.img -writable-system -no-snapshot-load-writable-system:允许修改系统分区;-no-snapshot-load:跳过快照,启动干净的系统环境。
Android Studio方式
- 打开Android Studio,进入
Tools > Device Manager; - 点击
Create device,选择与构建目标匹配的设备类型(如Pixel 5); - 在系统镜像选择界面,点击
Show all images,找到本地构建的AOSP镜像(标记为Custom,路径指向AOSP的out目录); - 完成设备创建后,点击启动按钮即可加载本地构建的AOSP系统。
四、全栈测试调试实现
完全支持从App层到Framework层再到HAL层的全栈调试:
- App层(Kotlin/Java):用Android Studio连接运行中的模拟器,直接设置断点调试;通过
adb logcat查看App日志。 - Framework层(Java):
- 在Android Studio中导入AOSP Framework源码,配置调试器连接模拟器的远程调试端口(默认8700);
- 执行
adb shell am set-debug-app -w com.android.settings指定待调试的系统App,重启该App后即可断点调试Framework代码; - 通过
adb logcat -s FrameworkTag过滤查看Framework层日志。
- HAL/Native层:
- GDB调试:先执行
adb forward tcp:1234 tcp:1234转发端口,再启动GDB并连接模拟器:gdb out/target/product/generic_x86_64/symbols/system/lib64/libhardware.so target remote :1234 - 日志查看:用
adb logcat -s NativeTag查看Native层日志,或adb shell dmesg查看内核相关日志。
- GDB调试:先执行
注:eng版本系统默认包含完整的调试符号表,无需额外配置即可进行全栈调试。
内容的提问来源于stack exchange,提问作者code
相关产品推荐
相关产品推荐

