本指导记录了在 Windows 下(除了安装外,其余章节 Linux 同样适用)使用 Repo 工具的过程,包括安装 Repo、配置代理、同步全部或部分 Android Open Source Project(APPS)工程源代码到本地,可方便 Android 系统研究人员后续使用 Source Insight 等工具本地查阅代码。

安装 Repo(Windows)

安装 Python

repo 是 Python 脚本,依赖于 Python。前往 https://www.python.org/downloads/ 下载安装 Python 3,安装过程注意勾选创建 PATH 环境变量,使 Python 程序目录添加到操作系统环境变量中。

安装 Git

前往 https://git-scm.com/downloads 下载安装 Git,在 Windows 上 Git 还提供了一个 bash 模拟器,称为 Git Bash。

安装 Repo

先在用户目录( %USERPROFILE% )下创建 bin 目录,然后手动下载 https://storage.googleapis.com/git-repo-downloads/repo 到该目录,最后将 bin 目录添加到 Windows PATH 环境变量中。

配置代理(可选)

在公司内网,可能需要额外配置代理才能让 git 和 repo 连接外网。

Git 代理配置

编辑 %USERPROFILE%/.gitconfig (Windows)或 ~/.gitconfig (Linux)

1
[http]
    proxy = http://user:[email protected]:8080
[https]
    proxy = http://user:[email protected]:8080

注意:连接内网地址时需要关闭代理。

Repo 代理配置

编辑 %USERPROFILE%/.bash_profile (Windows)或 ~/.bash_profile (Linux),增加如下代理配置:

1
export 




    
http_proxy= http://user:[email protected]:8080
export https_proxy = $http_proxy
export ftp_proxy = $http_proxy

完成上述代理配置后,bash(或 git bash)中运行的 Git 和 Repo 命令就会以代理的方式连接服务器了。

创建 AOSP 源代码根目录

1
mkdir AOSP

在源代码根目录初始化 Repo 客户端

在源码根目录执行 repo init 获取最新版本的 Repo,并通过指定清单文件来指定 Android 源代码中包含的各个代码库位于工作目录中的什么位置:

1
repo init -u https://android.googlesource.com/platform/manifest

上面命令会在 AOSP 目录创建 .repo 目录,包含最新版本 Repo 以及清单等文件。

如果因不明原因无法下载 Repo,可以用如下命令手动获取:

1
mkdir .repo
cd .repo
git clone https://gerrit.googlesource.com/git-repo
mv git-repo repo

同步源代码

AOSP 由大量项目组成,包含数百个 git 仓库,代码量十分巨大(因此 Google 开发 repo 工具)。同步源代码的方式有两种:

同步整个 AOSP 源代码

1
repo sync




    

同步 AOSP 子工程源代码

通过指定工程名来来执行 repo sync ,可以仅仅同步感兴趣的那部分源代码,并且在本地保持 AOSP 目录结构:

1
repo sync project_name1 projuect_nameN

其中工程名可通过查阅 .repo/manifest/default.xml 得到,例如 platform/frameworks/base

切换不同 AOSP 分支

1. 查看可切换的分支

1
cd .repo/manifests git branch -a | cut -d / -f 3

2. 切换分支 (以android-7.0.0_r1为例)

1
repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1

3. 同步代码

1
repo sync

如果本地版本库中的源代码有一些改动,执行上述命令后,会出现部分文件的提交无法合并的提示,此时使用下面的操作命令:

1
repo forall -c git reset --hard
repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1