使用 Repo 下载 AOSP 源代码
本指导记录了在 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
2
3
4
[http]
proxy = http://user:password@example.com:8080
[https]
proxy = http://user:password@example.com:8080
注意:连接内网地址时需要关闭代理。
Repo 代理配置
编辑 %USERPROFILE%/.bash_profile
(Windows)或 ~/.bash_profile
(Linux),增加如下代理配置:
1
2
3
export http_proxy=http://user:password@example.com: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
2
3
4
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
2
3
repo forall -c git reset --hard
repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1
repo sync
下载 Android Kernel 代码
Android Kernel 并不包含在 AOSP 中,需要单独下载。
根据官方链接 ,不同设备类型有不同的 kernel,有的 kernel 包含不止一个仓库,但有的 kernel (例如 common kernel,通用内核)则只有一个仓库,因此需要用 repo 工具来保证拉取到正确的仓库。
因此只拉取通用 kernel 的话,直接 git clone 即可:
1
git clone https://android.googlesource.com/kernel/common
注意:Windows 系统会报 error: invalid path 'include/soc/arc/aux.h'
的错误,原因是 Windows 文件系统不支持 aux
这个文件名,解决办法:前往 https://github.com/aosp-mirror/kernel_common 直接下载 zip
其他 kernel 的下载指令,请参考官方链接。
常见问题
- 添加了环境变量,但 Git Bash 仍然报找不到 Python 的错误(Windows)
1
/bin/env: python: No such file or directory
这种情况在 Git Bash 中执行 echo $PATH
会发现 Python 不在 PATH 变量中,解决办法是重启电脑以及重装 Git,让 Git 重新读取 Windows 的环境变量。
- 如果 Git Bash 执行 repo init 出现 PermissionError 的错误,以管理员身份运行即可