2. 下载并编译AOSP源码

任务目标

本案例要求在一台x86_64 Linux主机上,使用repo工具同步AOSP(Android Open Source Project)指定版本源码(以android-13.0.0_r41为例),并完成首次完整编译,最终生成可用于刷机的系统镜像文件。通过本案例,你将掌握AOSP源码获取与编译的标准流程,为后续SoC BSP开发建立基础环境。

环境与依赖

  • 操作系统:Ubuntu 20.04/22.04 x86_64(推荐),需预留至少400GB磁盘空间(源码约200GB,编译产物约200GB)
  • 内存:建议32GB以上,低于16GB可能导致编译失败
  • 基础工具:git、python3、curl、unzip、make等
  • JDK:AOSP 13使用OpenJDK 11(编译脚本会自动下载,无需手动安装)

实现步骤

1. 安装repo工具

repo是Google提供的多Git仓库管理工具,用于同步AOSP的数百个独立Git仓库。安装到用户目录即可:

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

2. 初始化repo并同步源码

创建源码目录并初始化指定分支。AOSP 13的tag为android-13.0.0_r41,对应Android 13的季度安全补丁版本:

mkdir -p ~/aosp
cd ~/aosp
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41
repo sync -c -j8

-c参数仅同步当前分支(减少数据量),-j8表示8个并行下载任务。同步时间取决于网络带宽,通常需要1~3小时。若中途失败,重新执行repo sync即可断点续传。

3. 配置编译环境并开始编译

AOSP使用自定义的envsetup.sh脚本初始化环境变量,然后选择编译目标。此处以模拟器镜像(sdk_pc_x86_64)为例,该目标适合验证编译流程且不需要特定硬件:

source build/envsetup.sh
lunch sdk_pc_x86_64-userdebug
make -j$(nproc)

lunch命令会输出所选目标的配置摘要。make的-j参数建议设为CPU核心数的1~2倍。首次完整编译需要2~4小时(取决于机器性能)。

4. 验证编译产物

编译完成后,系统镜像位于out/target/product/pc_x86_64/目录下。验证关键文件是否存在:

ls -lh out/target/product/pc_x86_64/*.img

预期输出应包含以下文件(文件大小因编译配置而异):

-rw-r--r-- 1 user user 1.2G system.img
-rw-r--r-- 1 user user 300M vendor.img
-rw-r--r-- 1 user user  50M boot.img

同时检查编译日志末尾是否包含#### build completed successfully ####字样:

tail -5 out/build_pc_x86_64.log 2>/dev/null || grep "build completed" out/build.log

常见问题与处理

  • 磁盘空间不足:编译过程中若报No space left on device,需清理out/目录中的旧产物(rm -rf out/)或扩展磁盘。
  • Python版本不匹配:AOSP 13要求Python 3.8~3.10,若系统默认Python版本过高,可使用update-alternatives切换。
  • repo sync网络中断:国内网络建议使用镜像源,将repo init中的URL替换为https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest。
  • 编译内存不足:在make前设置export JACK_SERVER_VM_ARGUMENTS="-Xmx4g"(仅旧版本需要),或减少-j并发数。

验证判定标准

本案例通过条件如下:

  1. repo sync完成后,源码根目录存在build/envsetup.sh和art/、frameworks/等关键目录;
  2. lunch命令正常输出所选目标配置,无报错;
  3. make命令最终以#### build completed successfully ####结束,退出码为0;
  4. out/target/product/pc_x86_64/下存在system.img、vendor.img、boot.img三个镜像文件。

满足以上4点即表示AOSP源码下载与首次编译成功。后续BSP开发中,可基于此环境替换内核、设备树或HAL模块后增量编译,无需重新全量构建。