1. AOSP源码下载与编译环境搭建:repo sync、构建脚本、make选项
AOSP(Android Open Source Project)的源码下载与编译环境是Framework层ActivityManager定制的基础。本章完整讲解从零搭建编译环境的完整链路,包括系统依赖、repo工具使用、构建脚本结构以及make核心选项,并针对常见错误给出可复现的解决方案。
1.1 环境要求与依赖安装
编译AOSP至少需要64位Linux系统(推荐Ubuntu 20.04 / 22.04 LTS)、16GB以上物理内存(建议32GB)、250GB空闲磁盘。主要依赖通过以下命令安装:
sudo apt update
sudo apt install git gnupg flex bison gperf build-essential zip curl zlib1g-dev \
gcc-multilib g++-multilib libc6-dev-i386 libncurses5 x11proto-core-dev \
libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
效率提示: 如果网络条件较差,可以在
~/.bashrc 中为 git 配置代理,加快 repo sync 速度。
1.2 repo 工具与源码清单管理
Google 使用 repo 工具管理 AOSP 数百个 git 仓库。安装方式:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin
初始化 manifest 仓库(以 Android 14 分支为例):
mkdir ~/aosp14 && cd ~/aosp14
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r15
下载全部源码(单线程或指定并行数):
repo sync -c -j4 # -c 只下载当前分支,-j4 使用4线程下载
| 参数 | 用途 | 建议值 |
|---|---|---|
-c | 只同步当前分支(节省磁盘) | 总是使用 |
-jN | 并行下载数 | 4~8(视网络与磁盘IO) |
--force-sync | 强制覆盖本地修改 | 偶发冲突时使用 |
--no-clone-bundle | 禁用克隆包(用于走代理) | 遇到SSL错误时尝试 |
常见错误:
fatal: unable to access ... SSL certificate problem —— 可尝试 git config --global http.sslVerify false 或配置正确的CA证书。
1.3 构建脚本体系与 Makefile 结构
AOSP 构建系统基于 GNU Make,顶层 Makefile 在源码根目录。核心脚本文件:
build/make/core/main.mk—— 主入口,加载全局变量和目标规则build/envsetup.sh—— 提供lunch、m、mm、mma等快捷命令build/soong/—— (Android 7+) 使用 Blueprint/Soong 替代部分 Make,但最终仍通过make驱动
标准编译序列(以 aosp_car_x86_64-eng 为例):
source build/envsetup.sh
lunch aosp_car_x86_64-eng
make -j$(nproc)
1.4 make 选项详解
| 选项 | 说明 | 示例 |
|---|---|---|
-jN | 并行编译任务数 | make -j16 |
SHOW_COMMANDS=1 | 打印每条编译命令 | make SHOW_COMMANDS=1 |
BUILD_CONFIG=xxx | 指定自定义构建配置(.mk文件) | make BUILD_CONFIG=mybuild.mk |
droid | 默认目标,生成 system.img | make droid |
clean | 清理所有编译产物 | make clean |
clobber | 彻底清理(包括中间文件) | make clobber |
可以通过 make showcommands 获取详细的构建日志用于分析编译错误。对于定制 ActivityManager,建议首次全编译后使用 mm(编译当前模块)加速调试循环:
cd frameworks/base/services/core
mm -j8
1.5 验证编译环境
编译完成后应输出类似以下内容的日志:
#### build completed successfully (03:45:12 (hh:mm:ss)) ####
产物目录 out/target/product/<device>/ 下应包含 system.img、ramdisk.img、boot.img 等关键镜像。
性能优化建议:
1. 使用
2. 将
3. 首次编译使用
1. 使用
ccache 加速重复编译:export USE_CCACHE=1 && ccache -M 50G2. 将
out/ 目录挂载到 tmpfs 或 SSD 分区3. 首次编译使用
make -jN N 值不超过 CPU 物理线程数的 1.5 倍
1.6 常见错误排查
- “Permission denied” —— 检查
repo和编译文件夹所有者,避免使用sudo make,建议chown -R user:user ~/aosp - “out of memory” —— 降低
-j值,或增加 swap 空间 - “ninja: build stopped: subcommand failed” —— 查看具体错误(通常在上方),如缺少库则按
1.1补装 - “revision ... not found” —— 检查 manifest 分支名是否正确,或
repo sync --force-sync重置
完成本章环境搭建后,即可进入第2章源码目录结构解析,精确定位 ActivityManager 相关代码位置。