2. 开发环境搭建:AOSP源码下载、编译环境配置(Ubuntu)、模拟器与真机调试环境搭建
说实话,搭建开发环境这件事,看着简单,但坑是真不少。我见过太多新手,代码写得很溜,结果卡在环境搭建上,一卡就是好几天。今天我就把这些年踩过的坑、积累的经验,一次性给你讲清楚。
核心要点:Android Automotive的开发环境,说白了就是一套标准的AOSP开发环境。但有几个关键点不一样——车载的硬件抽象层、系统服务、以及模拟器的配置。这些我会重点讲。
2.1 硬件要求:别在这上面省钱
先说说硬件。我刚开始做车载开发时,用一台8GB内存的笔记本,编译一次AOSP要6个小时。后来换了64GB内存的工作站,20分钟搞定。你想想看,这差距有多大。
| 配置项 | 最低要求 | 推荐配置 | 我的建议 |
|---|---|---|---|
| CPU | 4核 | 16核以上 | AMD Ryzen 9或Intel i9 |
| 内存 | 16GB | 64GB | 32GB起步,64GB不嫌多 |
| 硬盘 | 250GB | 1TB SSD | NVMe SSD,至少500GB |
| 操作系统 | Ubuntu 20.04 | Ubuntu 22.04 | LTS版本最稳 |
注意:千万别用虚拟机跑AOSP编译。我曾经试过,编译到一半虚拟机崩了,整个文件系统损坏,白干了三天。直接装双系统或者用独立机器。
2.2 Ubuntu环境配置:一步步来
嗯,这里要注意。Ubuntu的配置有几个关键步骤,顺序错了可能会出问题。
2.2.1 安装必要的依赖包
# 更新包管理器
sudo apt update
sudo apt upgrade -y
# 安装基础依赖
sudo apt 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
# 安装Python和Java
sudo apt install -y python3 python3-pip
sudo apt install -y openjdk-11-jdk
# 安装repo工具
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
source ~/.bashrc
小技巧:我个人习惯把repo工具放在~/bin目录下,这样不会污染系统目录。另外,记得把~/bin加到PATH里,不然每次都要写全路径。
2.2.2 配置Git和SSH
这一步很多人会忽略,但很重要。AOSP的代码管理依赖Git,SSH密钥能让你免密操作。
# 配置Git用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 生成SSH密钥
ssh-keygen -t rsa -b 4096 -C "你的邮箱"
# 一路回车,默认路径即可
# 查看公钥,添加到你的Git账号
cat ~/.ssh/id_rsa.pub
2.3 AOSP源码下载:耐心活
下载AOSP源码,说白了就是考验你的网速和耐心。Android Automotive的源码和普通AOSP是同一个仓库,只是多了一些车载相关的模块。
2.3.1 选择分支
不同的Android版本对应不同的分支。车载开发一般选择最新的稳定版。
| Android版本 | 分支名称 | 适用场景 |
|---|---|---|
| Android 12 | android-12.0.0_r34 | 较稳定,适合量产 |
| Android 13 | android-13.0.0_r41 | 新特性多,推荐学习 |
| Android 14 | android-14.0.0_r15 | 最新,但可能不稳定 |
2.3.2 下载源码
# 创建工作目录
mkdir -p ~/aosp/android-13
cd ~/aosp/android-13
# 初始化repo
repo init -u https://android.googlesource.com/platform/manifest \
-b android-13.0.0_r41
# 同步源码(这一步最耗时)
repo sync -j8 -c
避坑指南:我曾经用repo sync不加参数,结果下载了所有历史版本,占了我300GB硬盘。记得加-c参数,只下载当前分支的代码。
2.4 编译环境配置:让代码跑起来
源码下载完了,接下来就是编译。Android Automotive的编译和普通AOSP一样,但有几个车载特有的模块需要关注。
2.4.1 设置编译环境
# 进入源码目录
cd ~/aosp/android-13
# 加载编译环境
source build/envsetup.sh
# 选择编译目标
lunch
运行lunch后,你会看到一堆选项。对于车载开发,我们关注的是模拟器和真机目标。
| 目标名称 | 说明 | 适用场景 |
|---|---|---|
| aosp_car_x86_64-userdebug | 车载模拟器(x86架构) | 日常开发调试 |
| aosp_car_arm64-userdebug | 车载真机(ARM架构) | 真机测试 |
| aosp_car_x86-userdebug | 车载模拟器(32位) | 兼容性测试 |
2.4.2 开始编译
# 选择车载模拟器目标
lunch aosp_car_x86_64-userdebug
# 开始编译(-j参数根据CPU核心数调整)
make -j16
优化建议:编译时可以用make -j$(nproc)自动获取CPU核心数。另外,第一次编译建议用-j4,避免内存溢出。我见过有人用-j32,结果内存爆了,编译到一半卡死。
2.5 模拟器调试环境搭建
模拟器是开发阶段的主力。Android Automotive的模拟器和普通Android模拟器不太一样,它模拟的是车载系统,有车载特有的UI和功能。
2.5.1 启动模拟器
# 编译完成后,启动模拟器
emulator -avd car_avd -gpu swiftshader_indirect
# 或者直接启动(如果已经配置了AVD)
emulator -avd car_emulator
2.5.2 配置AVD
如果你用Android Studio,可以创建车载AVD。但说实话,我更推荐用命令行,更灵活。
# 创建车载AVD
avdmanager create avd -n car_avd -k "system-images;android-33;google_apis;x86_64" \
-d "pixel_c" -f
# 配置AVD硬件属性
echo "hw.gpu.enabled=yes" >> ~/.android/avd/car_avd.avd/config.ini
echo "hw.ramSize=4096" >> ~/.android/avd/car_avd.avd/config.ini
echo "hw.cpu.ncore=4" >> ~/.android/avd/car_avd.avd/config.ini
关键点:车载模拟器默认没有GPS和传感器模拟。如果你需要测试导航或车辆状态,记得在AVD配置里加上这些硬件。
2.6 真机调试环境搭建
真机调试是最终验证环节。车载设备一般通过USB或网络连接。
2.6.1 USB调试
# 检查设备是否识别
lsusb
# 添加USB设备规则
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"' \
| sudo tee /etc/udev/rules.d/51-android.rules
# 重启udev服务
sudo udevadm control --reload-rules
sudo udevadm trigger
# 连接设备
adb devices
2.6.2 网络调试
车载设备有时候USB口不方便,可以用网络调试。
# 确保设备和电脑在同一网络
# 设备端:开启网络调试
adb tcpip 5555
# 电脑端:连接设备
adb connect 192.168.1.100:5555
# 验证连接
adb devices
注意:网络调试在车载环境中很实用,但要注意安全性。我建议只在开发网络中使用,不要在生产环境开启。
2.7 知识体系总览
说了这么多,我画了一张图,帮你理清整个环境搭建的脉络。
2.8 常见问题与解决方案
最后,分享几个我经常遇到的问题,你遇到了可以直接查。
- 编译报错:「Out of memory」—— 减少-j参数,或者增加swap空间。
- 模拟器启动黑屏:检查GPU加速是否开启,尝试用-gpu swiftshader_indirect。
- adb找不到设备:检查USB驱动和udev规则,或者重启adb服务(adb kill-server && adb start-server)。
- repo sync卡住:网络问题,尝试用代理或者换时间段下载。
最后说一句:环境搭建是基础,但也是最能磨练耐心的环节。别急,一步步来。等你把环境搭好了,后面的开发就会顺畅很多。