第2章 开发环境搭建:AOSP 源码下载、编译环境配置与调试

说实话,搭建开发环境这件事,看着文档多,其实就三大块:源码怎么拉下来、编译环境怎么配、跑起来怎么调。我当年第一次搭 Automotive 环境时,光 repo sync 就重来了三回——不是网络断了,就是磁盘满了。这一章我把踩过的坑都摊开讲,你照着做就行。

2.1 硬件与系统要求

先别急着敲命令。看看你的机器够不够格。Android Automotive 的源码比手机 AOSP 还大,因为多了车机专用服务和 HAL。

项目 最低要求 推荐配置
CPU 核心数 8 核 16 核及以上
内存 16 GB 32 GB 或 64 GB
磁盘空间 250 GB(源码 + 编译输出) 500 GB SSD
操作系统 Ubuntu 20.04 LTS Ubuntu 22.04 LTS
网络 100 Mbps 500 Mbps,稳定不丢包
⚠ 磁盘警告: 千万别用机械硬盘。我见过同事用 HDD 拉源码,repo sync 跑了 14 个小时还没完。SSD 是硬门槛,NVMe 最好。

2.2 AOSP 源码下载

下载 AOSP 源码,核心工具就两个:repo 和 git。repo 是 Google 用来管理多 Git 仓库的脚本,说白了就是批量操作工具。

2.2.1 安装依赖包

sudo apt update
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

嗯,这里要注意:libncurses5 在 Ubuntu 22.04 上可能装不上,换成 libncurses5-dev 就行。我上次重装系统就卡在这一步,折腾了半小时。

2.2.2 安装 Repo 工具

mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH

记得把 export PATH=~/bin:$PATH 加到 ~/.bashrc 里,不然每次开终端都要重新 export。

2.2.3 初始化与同步

创建一个工作目录,比如 ~/aosp_automotive。然后初始化 Automotive 分支:

mkdir ~/aosp_automotive && cd ~/aosp_automotive
repo init -u https://android.googlesource.com/platform/manifest \
  -b android-14.0.0_r30 --depth=1
repo sync -c -j8
💡 小技巧: --depth=1 只拉最新版本,不拉历史记录。能省 30% 的下载量。我第一次没加这个参数,多下了 40 GB 没用的 Git 历史。

-j8 是并行线程数,一般设成 CPU 核心数的 1.5 倍。网络好的话可以开到 -j16。

2.2.4 网络问题处理

国内下载 AOSP 经常断流。我建议用镜像站:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest \
  -b android-14.0.0_r30 --depth=1

如果中途断了,重新执行 repo sync 会断点续传,不用从头再来。

2.3 编译环境配置

源码拉完了,接下来配编译环境。Android 编译依赖 JDK、Python 和一些系统库。

2.3.1 安装 JDK

Android 14 需要 OpenJDK 17:

sudo apt install openjdk-17-jdk
java -version

输出应该是 openjdk version "17.0.x"。如果系统里有多个 JDK,用 update-alternatives 切换。

2.3.2 安装 Python 与工具链

sudo apt install python3 python3-pip
sudo pip3 install meson ninja

Meson 和 Ninja 是 Android 14 开始用的新构建系统,比老式的 Make 快不少。

2.3.3 配置 ccache(加速编译)

ccache 能缓存编译中间文件。第二次编译能快 50% 以上。

sudo apt install ccache
echo 'export USE_CCACHE=1' >> ~/.bashrc
echo 'export CCACHE_DIR=~/.ccache' >> ~/.bashrc
source ~/.bashrc
ccache -M 50G

缓存大小我一般设 50 GB。太小了命中率低,太大了浪费磁盘。

2.4 编译 Automotive 系统

环境配好了,开始编译。Automotive 的编译命令和手机版略有不同。

2.4.1 选择目标设备

先加载编译环境:

source build/envsetup.sh

然后选择目标。模拟器用这个:

lunch sdk_car_x86_64-userdebug

真机的话,比如 Raspberry Pi 4:

lunch aosp_car_arm64-userdebug
目标名称 架构 适用场景
sdk_car_x86_64-userdebug x86_64 模拟器调试
aosp_car_arm64-userdebug ARM64 真机(RPi4、开发板)
aosp_car_x86_64-user x86_64 性能测试(无 root)

2.4.2 执行编译

make -j$(nproc)

$(nproc) 自动获取 CPU 核心数。第一次编译大概 2-4 小时,看机器配置。我 16 核的机器大概 1 小时 40 分钟。

🔑 关键路径: 编译产物在 out/target/product/ 下。模拟器镜像在 sdk_car_x86_64/ 目录里。

2.5 模拟器调试环境搭建

编译完了,先跑模拟器看看效果。不用真机也能调大部分车机功能。

2.5.1 启动模拟器

source build/envsetup.sh
lunch sdk_car_x86_64-userdebug
emulator -no-window -gpu swiftshader_indirect

-no-window 适合服务器环境。-gpu swiftshader_indirect 用软件渲染,兼容性好。

如果想看界面,去掉 -no-window:

emulator -gpu swiftshader_indirect

2.5.2 模拟器常用命令

  • adb shell — 进入模拟器终端
  • adb logcat — 查看日志
  • adb install — 安装 APK
  • adb reboot — 重启模拟器
💡 个人习惯: 我一般开两个终端。一个跑 logcat 实时看日志,另一个执行命令。这样出问题能立刻定位。

2.6 真机调试环境搭建

模拟器够用,但有些功能——比如 CAN 总线、GPS 模拟、车载传感器——必须上真机。

2.6.1 刷机准备

真机调试需要解锁 bootloader。不同设备方法不同,但通用步骤是:

  1. 开启开发者选项,勾选 OEM 解锁 和 USB 调试
  2. 进入 fastboot 模式(关机后按特定键组合)
  3. 执行 fastboot flashing unlock
  4. 刷入编译好的镜像:fastboot flashall
⚠ 重要: 解锁 bootloader 会清除所有数据。刷机前备份好。我曾经手滑没备份,客户演示用的数据全没了,尴尬到脚趾抠地。

2.6.2 配置 USB 权限

Linux 下 adb 需要 udev 规则:

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666"' | \
  sudo tee /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger

idVendor 是设备厂商 ID。Google 是 18d1,其他厂商可以查表。

2.6.3 验证连接

adb devices

输出应该显示设备序列号。如果显示 unauthorized,在手机上确认授权就行。

2.7 开发环境全景图

下面这张图把整个流程串起来了。从源码下载到真机调试,每一步都有对应工具和产物。

Android Automotive 开发环境搭建流程 开发环境搭建全景图 1. 源码下载 repo init + repo sync 分支: android-14.0.0_r30 镜像: 清华 / Google 2. 环境配置 JDK 17 + Python 3 ccache 50G Meson + Ninja 3. 编译系统 lunch + make 目标: sdk_car_x86_64 产物: out/ 目录 4. 模拟器调试 emulator 命令启动 adb logcat / adb shell 5. 真机调试 fastboot flashall adb devices 验证 💡 建议:先跑模拟器验证功能,再刷真机做硬件适配。两步都走通,才算环境搭完。

2.8 常见问题与避坑指南

最后,我把这些年遇到的高频问题列出来。你遇到类似情况,直接翻这里。

问题 原因 解决方案
repo sync 卡住不动 网络不稳定或 Git 连接超时 换镜像源,或加 --jobs=4 降低并发
编译报错 Out of memory 内存不足,Swap 没开 加 16 GB Swap,或降低 -j 线程数
模拟器启动黑屏 GPU 渲染模式不对 加 -gpu swiftshader_indirect
adb 找不到设备 udev 规则没配或 USB 线不行 检查 lsusb,配 udev,换线
刷机后无限重启 镜像版本不匹配或分区损坏 重新 fastboot flashall,必要时擦除 userdata
⚠ 我曾经踩过的坑: 有一次编译完刷机,发现车载蓝牙连不上。查了两天,最后发现是 lunch 选错了目标——用了手机版的 aosp_x86_64,不是 Automotive 的 sdk_car_x86_64。所以,lunch 一定要选带 car 的。