3. 首次完整编译AOSP

任务目标

在已下载并完成环境准备的AOSP源码树中,通过标准编译流程生成系统镜像文件(system.img、boot.img等),验证AOSP构建工具链可用且源码状态可产出可烧录镜像。

环境要求

  • 已下载AOSP源码(本案例以android-13.0.0_r41为例),磁盘剩余空间≥100GB
  • Ubuntu 20.04+,已安装openjdk-11、python3、git、curl等基础依赖
  • 内存≥16GB(推荐32GB),CPU核心数≥8

完整编译流程

1. 初始化构建环境

在AOSP源码根目录执行以下命令,加载构建所需的环境变量和函数:

```bash cd ~/aosp source build/envsetup.sh ```

该脚本会定义lunch、m、mm等构建辅助函数,并设置PATH指向构建工具链。

2. 选择编译目标

执行lunch不带参数会显示所有可用目标列表。本案例选择模拟器常用的x86_64用户debug版本:

```bash lunch aosp_x86_64-userdebug ```

选择后系统会输出目标配置摘要,包括PLATFORM_VERSION、TARGET_PRODUCT、TARGET_BUILD_VARIANT等关键变量,确认无误后继续。

3. 执行编译

使用make命令启动编译。参数-j$(nproc)表示使用所有可用CPU核心并行编译以缩短耗时:

```bash make -j$(nproc) ```

首次编译需要数小时(取决于机器性能)。编译过程中终端会持续输出编译日志,包括正在编译的模块、警告信息等。若编译中断,可重新执行make -j$(nproc)继续,构建系统会从断点处增量编译。

验证方法

编译成功时,终端最后会显示类似#### build completed successfully ####的提示。随后检查镜像文件是否生成:

```bash ls -lh out/target/product/generic_x86_64/*.img ```

预期能看到以下关键镜像文件(文件大小因源码版本略有差异):

  • system.img — 系统分区镜像
  • boot.img — 内核启动镜像
  • vendor.img — vendor分区镜像(若目标包含vendor分区)
  • userdata.img — 用户数据分区镜像

同时检查构建产物中的系统属性文件确认版本信息:

```bash cat out/target/product/generic_x86_64/system/build.prop | grep ro.build.version.release ```

输出应显示ro.build.version.release=13,与源码版本一致。

常见问题

  • 磁盘空间不足:编译产物约占用80-100GB,确保源码目录所在分区有足够空间,可用df -h ~/aosp检查。
  • 内存不足导致编译中断:若编译进程被系统OOM Killer终止,可减少并行任务数,改用make -j4重试。
  • lunch报错:确认在源码根目录执行source build/envsetup.sh,且当前shell为bash(zsh需先执行bash切换)。
  • Java版本不匹配:Android 13要求OpenJDK 11,用java -version确认,若版本不符需安装并设置JAVA_HOME。

编译完成后,可通过emulator命令直接启动模拟器验证镜像可用性(需先执行source build/envsetup.sh和lunch),但该步骤属于运行验证,非本案例编译目标必需项。