3. 同步AOSP源码
任务目标
在本地Linux环境中,通过repo工具将指定版本的AOSP(Android Open Source Project)源码完整同步到本地磁盘,并验证源码树结构完整、版本信息正确,为后续ROM编译提供干净的源码基础。
环境与依赖
- 操作系统:Ubuntu 20.04+(或Debian 10+),x86_64架构
- 磁盘空间:至少300GB可用空间(AOSP全量源码约150GB,编译产物另需空间)
- 内存:建议16GB以上
- 必要工具:
git、python3、curl,以及repo工具本身
安装repo工具:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
核心实现:同步AOSP源码
以下脚本完成从初始化repo到同步完成的全过程。选择Android 13(T)稳定分支android-13.0.0_r75作为示例版本,该分支对应Pixel 6系列设备,可稳定编译。
#!/bin/bash
# sync_aosp.sh - AOSP源码同步脚本
# 用法: ./sync_aosp.sh [源码根目录路径]
set -e # 任何错误立即退出
# 配置区
AOSP_ROOT="${1:-~/aosp}" # 源码根目录,默认 ~/aosp
AOSP_BRANCH="android-13.0.0_r75" # 目标分支
REPO_URL="https://android.googlesource.com/platform/manifest"
# 创建源码根目录
mkdir -p "$AOSP_ROOT"
cd "$AOSP_ROOT"
# 初始化repo(首次执行时)
if [ ! -f ".repo/manifest.xml" ]; then
echo "==> 初始化repo,分支: $AOSP_BRANCH"
repo init -u "$REPO_URL" -b "$AOSP_BRANCH" --depth=1
fi
# 同步全部源码
echo "==> 开始同步源码(此步骤耗时较长,请保持网络稳定)"
repo sync -j$(nproc) -c # -c: 仅同步当前分支,--depth=1配合使用减少数据量
# 验证同步结果
echo "==> 验证源码完整性"
if [ -f "build/envsetup.sh" ] && [ -d "frameworks/base" ] && [ -d "kernel" ]; then
echo "源码树结构验证通过"
else
echo "错误: 源码树不完整,缺少关键目录" >&2
exit 1
fi
# 输出版本信息
echo "==> 当前源码版本:"
grep -m1 "PLATFORM_VERSION" build/core/version_defaults.mk 2>/dev/null || \
grep -m1 "PLATFORM_VERSION" build/soong/soong_variables.go 2>/dev/null || \
echo "版本信息位于build目录中,可后续通过编译系统确认"
echo "==> 同步完成"
运行方式
- 将上述脚本保存为
sync_aosp.sh,赋予执行权限:chmod +x sync_aosp.sh - 执行同步:
./sync_aosp.sh /data/aosp(将/data/aosp替换为实际目标路径,确保该分区有足够空间) - 同步过程中可另开终端执行
df -h /data/aosp监控磁盘占用
验证方法与通过条件
同步完成后,按以下步骤验证源码可用性:
cd /data/aosp
# 1. 检查repo状态是否干净
repo status | head -20 # 应无输出或仅显示未跟踪文件
# 2. 验证关键目录存在
ls -d build frameworks kernel packages # 应全部存在
# 3. 验证git分支正确
cd frameworks/base && git branch -a | head -5 # 应显示android-13.0.0_r75
# 4. 统计源码体量(预期约150GB)
du -sh . --exclude=.repo
通过条件:以上命令均正常执行,repo status无错误输出,关键目录存在,frameworks/base的git分支为android-13.0.0_r75,源码总大小在120GB以上(因--depth=1裁剪历史,体积会小于全量)。满足以上条件即视为同步成功,可进入下一步源码编译准备。
常见问题
- 网络中断导致同步失败:重新执行
repo sync即可断点续传,repo会自动跳过已完成的仓库。 - 磁盘空间不足:使用
--depth=1参数已显著减少数据量(约节省30%空间),若仍不足请清理磁盘或更换更大分区。 - Python版本不兼容:repo需要Python 3.6+,检查
python3 --version,必要时通过update-alternatives切换默认Python版本。