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并发数。
验证判定标准
本案例通过条件如下:
repo sync完成后,源码根目录存在build/envsetup.sh和art/、frameworks/等关键目录;lunch命令正常输出所选目标配置,无报错;make命令最终以#### build completed successfully ####结束,退出码为0;out/target/product/pc_x86_64/下存在system.img、vendor.img、boot.img三个镜像文件。
满足以上4点即表示AOSP源码下载与首次编译成功。后续BSP开发中,可基于此环境替换内核、设备树或HAL模块后增量编译,无需重新全量构建。