1. 环境准备与依赖安装
搭建AOSP编译环境的第一步是准备合适的Linux系统和安装必要的依赖包。我推荐使用Ubuntu 18.04或更高版本,这是Google官方推荐的开发环境。实测在Ubuntu 20.04 LTS上编译Android 13可以顺利完成。
系统要求:
- 至少16GB内存(32GB以上更佳)
- 250GB以上可用磁盘空间(SSD能显著提升编译速度)
- 稳定的网络连接(源码下载约50GB)
安装基础依赖包的命令如下:
sudo apt-get update sudo apt-get install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python3Java环境配置: 不同Android版本需要不同的JDK版本:
- Android 7.0-8.0:OpenJDK 8
- Android 9.0及以上:OpenJDK 11
安装OpenJDK 11的命令:
sudo apt-get install openjdk-11-jdk交换空间优化: 编译过程内存消耗巨大,建议配置8GB以上的交换空间:
sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab2. 源码下载与repo工具配置
配置Git身份:
git config --global user.name "Your Name" git config --global user.email "you@example.com"安装repo工具:
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo国内镜像源配置(大幅提升下载速度): 推荐使用清华源或中科大源,修改repo的下载源:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'初始化代码仓库: 以Android 13.0.0_r43为例:
mkdir aosp cd aosp repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r43高效同步技巧:
- 使用
-j参数并行下载(建议4-8个线程) - 添加
-c参数只同步当前分支 - 使用
--no-tags避免下载不必要的标签
完整同步命令:
repo sync -c -j8 --no-tags --optimized-fetch --prune如果同步中断,可以重复执行上述命令继续下载。首次完整同步可能需要2-6小时,取决于网络状况。
3. 编译配置与优化
环境初始化:
source build/envsetup.sh选择编译目标:
- 手机模拟器:
lunch sdk_phone_x86_64 - 车载系统:
lunch sdk_car_x86_64 - 真机编译需要选择对应设备代号
ccache配置(加速后续编译): 在~/.bashrc中添加:
export USE_CCACHE=1 export CCACHE_DIR=/path/to/ccache prebuilts/misc/linux-x86/ccache/ccache -M 50G并行编译设置:
make -j$(nproc)建议线程数 = CPU核心数 × 1.5,例如8核CPU使用12线程
常见编译目标:
make:完整编译make bootimage:仅编译内核make systemimage:仅编译系统镜像mm:编译当前目录模块mmm path/to/module:编译指定路径模块
4. 常见问题解决方案
内存不足错误:
FAILED: out/soong/build.ninja Killed (signal 9)解决方案:
- 增加交换空间(见第1章)
- 减少编译线程数:
make -j4 - 修改JVM堆大小:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g"分区空间不足:
Not enough space on device for partition vendor修改设备配置文件:
vim device/generic/goldfish/64bitonly/product/sdk_phone64_x86_64.mk增大BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE值
模拟器KVM加速问题:
CPU acceleration status: This user doesn't have permissions to use KVM解决方案:
sudo apt-get install qemu-kvm sudo usermod -aG kvm $USER单模块编译后部署: 以修改SystemUI为例:
mmm frameworks/base/packages/SystemUI adb push out/target/product/emulator_x86_64/system_ext/priv-app/SystemUI/SystemUI.apk /system_ext/priv-app/SystemUI/ adb reboot5. 高级技巧与实用工具
增量编译技巧:
- 使用
ccache缓存中间文件 - 只编译修改的模块
- 生成补丁文件:
git diff > mychange.patch git apply mychange.patch版本切换: 查看可用分支:
cd .repo/manifests git branch -a切换到Android 14:
repo init -b android-14.0.0_r7 repo syncAndroid Studio导入:
- 生成IDE配置文件:
make idegen development/tools/idegen/idegen.sh- 用Android Studio打开
android.ipr文件
车载系统特殊配置: 多屏模拟器启动命令:
lunch sdk_car_md_x86_64 emulator -feature -CarMultiDisplay编译时间统计:
export BUILD_START=$(date +%s) make -j16 echo "Build time: $(($(date +%s) - $BUILD_START)) seconds"通过以上步骤,你应该已经成功搭建起完整的AOSP编译环境。在实际开发中,建议首次编译选择模拟器目标,成功后再尝试真机编译。记得定期执行repo sync保持代码更新,遇到编译错误时先检查是否是代码同步不完整导致。