1. repo 是什么?
1.1 核心作用
repo是 Google 开发的代码管理工具,专为 AOSP(Android Open Source Project)设计,用于管理数百个 Git 仓库。- AOSP 由上千个独立的 Git 项目组成(如
frameworks/base、packages/apps/Settings),repo通过一个清单文件(manifest.xml)统一协调这些仓库的版本和依赖关系。
1.2 与 git 的关系
| 工具 | 管理范围 | 适用场景 |
|---|---|---|
git | 单个代码仓库 | 普通项目开发 |
repo | 多个 Git 仓库的集合 | 超大型项目(如 AOSP、Linux Kernel) |
2. repo 基本用法
2.1 安装 repo
# Linux/macOS
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin # 临时生效,可加入 ~/.bashrc 永久生效
2.2 初始化仓库
mkdir aosp && cd aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r29
-u:指定清单文件(manifest.xml)的 URL。-b:选择分支(如android-14.0.0_r29)。
国内用户替换为清华镜像:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r29
2.3 同步代码
repo sync -j8 # 并行下载(-j8 表示 8 个线程)
3. 如何仅下载部分代码?
3.1 方法 1:repo sync 指定路径
仅同步特定目录(如 Settings 和 Framework):
repo sync -c -j8 packages/apps/Settings frameworks/base
-c:仅同步当前分支(节省时间)。packages/apps/Settings和frameworks/base是目标路径。
3.2 方法 2:修改 manifest.xml 自定义清单
-
复制默认清单:
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r29 cp .repo/manifests/default.xml .repo/local_manifest.xml -
编辑
.repo/local_manifest.xml,删除不需要的<project>节点,仅保留目标模块(如Settings):<manifest> <project path="packages/apps/Settings" name="platform/packages/apps/Settings" /> </manifest> -
重新同步:
repo sync -j8
3.3 方法 3:--depth=1 浅克隆(节省空间)
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r29 --depth=1
repo sync -c -j8 packages/apps/Settings
--depth=1:仅克隆最新提交,不包含历史记录。
4. 常用 repo 命令
| 命令 | 作用 |
|---|---|
repo init -u <URL> -b <分支> | 初始化仓库 |
repo sync -j8 | 同步所有代码 |
repo sync <路径> | 仅同步指定目录 |
repo status | 查看仓库状态 |
repo branch | 列出所有分支 |
repo start <分支名> --all | 创建新分支 |
repo diff | 查看代码改动 |
5. 仅下载部分代码的适用场景
5.1 仅研究 Settings 应用
repo sync -c -j8 packages/apps/Settings
5.2 仅研究 Framework 核心
repo sync -c -j8 frameworks/base
5.3 仅研究 Binder 机制
repo sync -c -j8 frameworks/native/libs/binder
6. 注意事项
-
依赖关系:
- 部分模块(如
Settings)依赖Framework,若仅下载单个模块,可能无法直接编译。需通过make或mm在完整 AOSP 环境中编译。
- 部分模块(如
-
网络问题:
- 国内用户建议使用清华/中科大镜像加速。
-
磁盘空间:
- 完整 AOSP 约 150GB+,但仅下载
Settings只需约 100MB。
- 完整 AOSP 约 150GB+,但仅下载
7. 总结
-
repo是管理 AOSP 多仓库的核心工具,支持灵活下载部分代码。 -
仅下载指定模块:
- 使用
repo sync <路径>直接同步。 - 或修改
local_manifest.xml自定义清单。
- 使用
-
适合场景:
- 快速研究特定模块(如
Settings、Framework)。 - 节省磁盘空间和时间。
- 快速研究特定模块(如