测试环境搭建:Android源代码下载、编译、模拟器配置
要做 AOSP 测试 Mock 回放,你首先得有一套能跑起来的 AOSP 环境。这活儿我干了好几年,坦白讲,光是下载 + 编译就劝退过不少人。但别怕,我把踩过的坑一个个列出来,你照着来就好。
2.1 环境准备——硬件和软件的最低要求
先聊聊硬件。我个人的经验是——千万别在 8GB 内存的机器上尝试完整编译 AOSP。我在项目初期就吃过这个亏,编译到一半直接 OOM,系统卡死。你至少需要:
- 内存:16GB 起步,32GB 更稳
- 磁盘:SSD,至少 250GB 可用空间(下载源码 + 编译产物需要 150GB 左右)
- CPU:4 核以上,8 核最好
- 操作系统:Ubuntu 20.04 或 22.04 LTS,我推荐 22.04
2.2 下载 AOSP 源代码
AOSP 用的是 Google 的 repo 工具,本质上是对 git 的多仓库管理。你不需要理解太深,会敲命令就行。但我建议你先搞清楚一件事——你下载的分支。我一般用 android-13.0.0_r41(对应 Android 13),稳定且 Mock 回放相关代码齐全。
操作步骤如下:
- 安装 repo:
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo - 创建源码目录并初始化:
mkdir aosp cd aosp repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41 - 开始下载:
repo sync -c -j8
-j8 是并行下载线程数,根据你 CPU 核心数来。我之前试过 -j16 结果把公司的代理服务器搞崩了……建议先 8 线程稳一点。
repo init 的 URL 换成:https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
下载完成后,你会得到一个约 40GB 的 .repo 目录。别急着高兴,这只是第一步。
2.3 编译 AOSP 镜像
编译前你要选目标设备。我们是写测试 Mock 回放的,通常用 aosp_arm64 或 aosp_x86_64。我个人习惯用 aosp_x86_64,因为模拟器跑起来快。
先设置环境:
source build/envsetup.sh
然后选择编译目标:
lunch aosp_x86_64-eng
这里 -eng 表示 engineering 版本,自带 root 权限,方便调试。如果你做 CTS 测试,可能要用 -userdebug。但 Mock 回放大多数情况 -eng 就够了。
接下来就是漫长的编译:
make -j$(nproc)
nproc 是获取 CPU 核数,我建议留一个核给系统用,比如 make -j$(($(nproc)-1))。否则你编译的时候电脑基本上干不了别的。
首次编译时间?我记得在 i7-10750H + 32GB 内存的笔记本上,大约花了 2 小时 40 分钟。但别急,后面增量编译就快多了。我最长的一次是第一遍编译,结果因为 Python 版本问题失败了——AOSP 编译环境要求 Python 3.8~3.10,我用的是 Ubuntu 22.04 自带的 3.10,没问题。如果你用 Ubuntu 20.04,记得检查 Python 版本。
2.4 配置模拟器
编译成功后,你会在 out/target/product/generic_x86_64/ 下看到 system.img、userdata.img、ramdisk.img 等文件。有了这些,就能启动模拟器了。
启动方法非常简单:
emulator -avd MyAVD
# 或者直接用编译出来的镜像
emulator -system out/target/product/generic_x86_64/system.img -data out/target/product/generic_x86_64/userdata.img -ramdisk out/target/product/generic_x86_64/ramdisk.img
但注意,首次启动前你需要先创建一个 AVD(Android Virtual Device)。推荐用命令行:
avdmanager create avd -n MyAVD -k "system-images;android-33;google_apis;x86_64" -d pixel_6
参数说明:
-n MyAVD:设备名,随便起-k:指定系统镜像,这里对应 Android 13 API 33-d pixel_6:设备配置,你可以用avdmanager list device查看所有可选
我个人习惯先运行 emulator -list-avds 确认有没有创建成功。然后执行 emulator -avd MyAVD -writable-system。为什么要加 -writable-system?因为 Mock 回放经常需要把编译好的测试二进制 push 到 /system 分区,不加这个参数你 remount 会失败。
Cannot launch AVD in emulator,八成是你的 KVM 没开。检查一下:kvm-ok 命令,如果提示不支持,去 BIOS 开启虚拟化。我在一台 Dell 工作站上折腾了半天,最后发现 BIOS 里 VT-x 被禁了。
启动成功后,你会看到模拟器界面。运行 adb devices 能看到模拟器已经连上了。这时你可以验证一下编译结果:
adb shell getprop ro.build.fingerprint
输出应该包含你编的版本号。
2.5 完整环境搭建流程总结
2.6 验证环境是否就绪
模拟器启动后,我习惯用三个小命令快速验证:
adb shell whoami—— 输出应为root(因为我们编的 eng 版本)adb shell ps -ef | grep system_server—— 看系统服务是否正常adb reboot—— 模拟器能正常重启,说明编译没问题
如果以上都通过,恭喜你,环境搭好了!后面可以开始写测试代码了。