2. 开发环境搭建:AOSP源码下载、车载模拟器配置、编译系统详解、刷机与调试
说实话,车载开发环境搭建这件事,我见过太多人在这里栽跟头了。有人下载源码三天三夜没成功,有人编译到一半硬盘爆了,还有人刷机把设备刷成砖。嗯,今天我就把这些坑一个个给你指出来。
先看一张整体流程图,帮你建立全局认知:
2.1 AOSP源码下载:别让网络卡住你
源码下载是第一步,也是很多人第一步就卡住的地方。我个人习惯用 repo 工具来管理,Google 官方也是这么推荐的。
先装 repo:
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
然后初始化并同步代码。这里有个关键点——一定要选对分支。车载开发通常用 android-12.0.0_r34 或更新的版本:
mkdir aaos-source
cd aaos-source
repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r34
repo sync -j8 -c
同步完成后,源码大概 40-60GB。嗯,这只是开始,编译后还会膨胀好几倍。
2.2 车载模拟器配置:没有真车机也能跑
说实话,不是每个团队都有真车机。Google 提供了 Automotive 模拟器,配置起来其实不复杂。
首先确保你的环境支持 KVM:
kvm-ok
# 如果输出 "KVM acceleration can be used",说明没问题
然后编译模拟器镜像:
source build/envsetup.sh
lunch sdk_car_x86_64-userdebug
make -j8
编译完成后启动模拟器:
emulator -avd AAOS_AVD -gpu host -memory 2048 -cores 4
-wipe-data,特别是第一次启动时。不然有时候旧数据会导致奇怪的崩溃,排查起来很头疼。
模拟器启动后,你会看到一个车载中控界面。这时候可以试试用 adb 连接:
adb devices
# 应该能看到 emulator-5554 device
2.3 编译系统详解:别被 Makefile 吓到
AOSP 的编译系统,说白了就是一套基于 Make 的构建框架。但 Google 封装了一层 Soong(用 Go 写的),现在大部分模块都用 Android.bp 文件来配置。
核心流程就三步:
- source build/envsetup.sh —— 加载编译环境
- lunch <product>-<variant> —— 选择目标产品和编译类型
- make -jN —— 开始编译
车载开发常用的 lunch 选项:
| 产品名 | 说明 | 适用场景 |
|---|---|---|
| sdk_car_x86_64 | 模拟器用 x86_64 镜像 | 开发调试 |
| sdk_car_arm64 | 模拟器用 ARM64 镜像 | 兼容性测试 |
| aosp_car_x86_64 | 真车机 x86_64 镜像 | 实车部署 |
| aosp_car_arm64 | 真车机 ARM64 镜像 | 实车部署 |
编译类型有三种:
- user —— 正式发布版,没有 root 权限
- userdebug —— 开发版,有 root 权限,带调试符号
- eng —— 工程版,最全的调试功能,但性能最差
我的建议: 日常开发用 userdebug。既保留了调试能力,性能又不会太差。我见过有人一直用 eng 编译,结果模拟器卡得鼠标都动不了。
编译单个模块也很方便:
mmm packages/services/Car/
# 或者
make CarService
编译完成后,输出在 out/target/product/<product>/ 目录下。
2.4 刷机与调试:真机验证的最后一公里
模拟器跑通了,下一步就是刷到真车机上。这里我踩过不少坑,一个个说。
首先,进入 fastboot 模式:
adb reboot bootloader
# 或者直接按车机上的物理按键(不同设备不一样)
然后刷机:
fastboot flashall -w
# -w 表示 wipe data,会清空用户数据
刷完后重启:
fastboot reboot
调试方面,最常用的就是 adb logcat:
adb logcat -b all | grep CarService
# 只看 CarService 的日志
如果遇到 native 层崩溃,可以用 gdb 调试:
adb shell
gdbserver :5039 --attach <pid>
# 然后在主机上连接
adb forward tcp:5039 tcp:5039
gdbclient <pid>
adb shell dumpsys car_service 来查看车辆状态。这个命令能输出当前的车速、车门状态、空调温度等信息,对排查问题特别有用。
还有一个调试利器是 bugreport:
adb bugreport bugreport.zip
# 会生成一个包含所有日志、dump、配置的压缩包
嗯,到这里,你的开发环境就搭建好了。接下来就是写代码、编译、调试的循环。记住,环境搭建虽然枯燥,但基础打好了,后面会省很多事。
公众号:蓝海资料掘金营,微信deep3321