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版本:
选择后系统会输出目标配置摘要,包括PLATFORM_VERSION、TARGET_PRODUCT、TARGET_BUILD_VARIANT等关键变量,确认无误后继续。
3. 执行编译
使用make命令启动编译。参数-j$(nproc)表示使用所有可用CPU核心并行编译以缩短耗时:
首次编译需要数小时(取决于机器性能)。编译过程中终端会持续输出编译日志,包括正在编译的模块、警告信息等。若编译中断,可重新执行make -j$(nproc)继续,构建系统会从断点处增量编译。
验证方法
编译成功时,终端最后会显示类似#### build completed successfully ####的提示。随后检查镜像文件是否生成:
预期能看到以下关键镜像文件(文件大小因源码版本略有差异):
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),但该步骤属于运行验证,非本案例编译目标必需项。