4、Android系统搭建:Android 12 AOSP 编译环境搭建、刷机与调试
好,咱们进入正题。这一章要聊的,是座舱测试里最基础也最绕不开的一步——把Android 12的AOSP环境搭起来,然后编译、刷机、调试。说实话,我见过不少测试同事在这块栽跟头,不是编译报错就是刷成砖。其实没那么玄乎,咱们一步步来。
4.1 为什么非得自己编译AOSP?
你可能会问:直接用厂商给的镜像不行吗?嗯,大部分时候可以。但做座舱测试,你免不了要改系统级的东西。比如改个WiFi策略、调个音频通道、甚至加个自定义的HAL层服务。这时候,没有源码在手,你就像个盲人。
我自己在项目里就遇到过:某次需要验证一个车载蓝牙的A2DP延迟问题,厂商的镜像死活不暴露底层log。最后只能自己编译一个userdebug版本,把log等级拉满,问题才定位到。说白了,自己编译AOSP,是你掌控测试深度的第一步。
4.2 硬件与软件环境准备
先说说硬件。编译AOSP 12,机器不能太差。我个人的建议是:
- CPU:至少8核,16核更舒服。我用的AMD 5950X,编译一次大概40分钟。
- 内存:32GB起步,64GB不嫌多。你想想看,光是加载源码和中间产物,16GB就捉襟见肘了。
- 硬盘:必须SSD,建议500GB以上空闲空间。AOSP 12完整编译一次,占用大概200GB左右。
- 操作系统:Ubuntu 20.04 LTS,这个版本最稳。我试过22.04,有些依赖包会出小问题。
4.3 搭建编译环境
环境搭建说白了就是装一堆依赖包。我直接给出一份经过验证的清单:
sudo apt-get update
sudo apt-get install -y git-core gnupg flex bison build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev \
lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
这里有个坑:libncurses5 在Ubuntu 20.04的默认源里可能找不到。我曾经在这卡了半小时,最后发现需要手动添加一下源。解决办法很简单:
sudo apt-get install -y libncurses5-dev
如果还报错,试试 libncurses5 的32位版本。嗯,这里要注意,不同Ubuntu小版本可能会有细微差异。
4.4 下载AOSP 12源码
下载源码,我推荐用清华或中科大的镜像站。Google官方的速度,你懂的。用repo工具来管理:
mkdir ~/aosp-12
cd ~/aosp-12
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-12.0.0_r32
repo sync -c -j8
-j8 表示8个线程并行下载。如果你的网络带宽够,可以加到 -j16。我第一次下载时用了 -j4,结果等了一整夜。后来发现,线程数设成CPU核心数的两倍左右,速度最理想。
repo sync,它会断点续传。我经常在下载到90%时断网,这招救了我很多次。
4.5 编译AOSP
源码下好了,开始编译。先初始化环境:
source build/envsetup.sh
lunch aosp_car_x86_64-userdebug
这里我选的是 aosp_car_x86_64-userdebug,因为咱们做座舱测试,车机版最合适。userdebug 版本比 user 版本多了root权限和更多调试接口。我个人习惯,只要不是给最终用户用,一律选userdebug。
然后就是编译:
make -j16
第一次编译,时间会比较长。我的机器大概40分钟,如果你的是笔记本,可能得2-3小时。这时候可以去喝杯咖啡,或者看看文档。编译过程中如果报错,多半是依赖包没装全。别慌,看错误日志,缺什么装什么。
核心要点:编译成功后会生成镜像文件,路径在 out/target/product/<设备名>/。你需要关注的主要是 system.img、vendor.img、boot.img 这三个。
4.6 刷机与调试
镜像编译好了,接下来就是刷到设备上。我以常见的Pixel设备为例(车机版同理,只是fastboot命令略有差异):
adb reboot bootloader
fastboot flash system system.img
fastboot flash vendor vendor.img
fastboot flash boot boot.img
fastboot reboot
刷机前,记得备份数据。我曾经有一次手滑,把 fastboot flash boot 写成了 fastboot flash bootloader,结果设备直接变砖。还好Pixel有救砖模式,不然就真凉了。
刷完重启,如果卡在开机动画,别急。等5分钟,如果还不行,可能是镜像有问题。这时候可以进recovery模式,双清一下:
adb reboot recovery
# 在recovery界面选择 wipe data/factory reset
调试方面,我推荐几个必装工具:
- adb:不用多说,调试必备。
- fastboot:刷机工具。
- logcat:看日志,定位问题。我习惯用
adb logcat -v threadtime看带时间的详细日志。 - dumpsys:查看系统服务状态。比如
adb shell dumpsys car可以看车机服务。
4.7 常见问题与避坑指南
最后,分享几个我踩过的坑:
- 编译时提示内存不足:增加swap空间。我一般设16GB swap,够用。
- 刷机后无法开机:检查一下
lunch时选的设备型号对不对。选错了设备,镜像不兼容。 - adb devices 找不到设备:先检查驱动,再检查USB调试是否开启。有时候换个USB口就好了,别问我怎么知道的。
好了,这一章的内容就这些。环境搭好、编译通过、刷机成功,你就迈出了座舱测试的第一步。下一章,咱们聊聊怎么在AOSP上搭建自动化测试框架。到时候见。