原文链接:http://source.android.com/source/downloading.html
Android源码树位于谷歌名下的Git仓库中,本文讲述如何下载指定版本的android源码树。
一、安装Repo
Repo是一个方便的从Git下载Android源码树的工具。关于这个工具的更多介绍可参考Developing小节。
Repo安装步骤:
1、在你的工作目录下创建一个bin目录
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2、下载Repo工具,并给与可执行权限
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
二、初始化一个Repo客户端
安装完repo后,需要设置本地客户端可以访问android的源码库。
1、创建一个空目录用来存放你的文件。如果你使用的是MAC os,它的文件系统是大小写敏感的,你可以像下面一样指定目录名称:
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
2、运行repo init来获得Repo的最新版本。你必须指定一个清单的URL,这个清单指定了android源码中不同的库在你的工作目录中存放的位置。
$ repo init -u https://android.googlesource.com/platform/manifest
如果想要获取分支版本的源码,需要指定参数-b。可以在Source Code Tags and Builds中看到分支的列表
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
3、当提交代码时,需要使用你真实的姓名和邮箱地址来配置Repo。为了使用Gerrit 代码评审工具,你需要一个注册了google账户的邮箱地址,这个邮箱用来接受消息。你的代码提交时显示的名称就是你提供的名字。
当收到了返回的初始化Repo成功的消息时,初始化才算真正完成。初始化完成后,将会有一个.repo的文件夹出现,这个文件夹用来存储譬如清单等文件。
二、下载Android源码树
运行下面的命令可以把你指定的Android源码树下载到你的工作目录中。
$ repo sync
在工作目录中,android源码文件是按照工程名称来存放的,sync操作将持续一个或者多个小时。关于repo的更多信息可以查看Developing小节。
三、使用认证
默认情况下,获得了Android源代码是匿名的。为了防止过度使用的服务器,每个服务器的IP地址与一个配额关联。
当与其他用户共享IP地址时(例如,当绕过一个NAT 防火墙访问源码库时)配额甚至可以定期使用模式触发(例如,当许多用户在一个很短的期间内使用同一个IP地址来同步新客户端时)
在这种情况下,有可能使用认证访问,然后为每个用户使用单独的配额,而不管IP地址。
第一步是使用密码生成器来创建一个密码,可以参考指导页面。
第二步骤是为了迫使认证访问,通过使用下面的清单的URI:
https://android.googlesource.com/a/platform/manifest
.
请注意如何/a/目录前缀触发强制认证。您可以使用下面的命令将现有的客户端使用强制认证:
$ repo init -u https://android.googlesource.com/a/platform/manifest
四、解决网络问题
当使用一个代理下载时(这个在一些公司环境中很常见),显示的指定repo使用的代理很重要:
$ export HTTP_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
$ export HTTPS_PROXY=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
Linux客户端遇到链接问题的情况比较少见,一般是卡在下载中间(通常是在“Receiving objects”中)。据说调整tcp\ip栈的设置和使用非并行命令可以改善这个情况。你需要root权限才能修改tcp设置:
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1
五、使用本地镜像
当使用多个客户端时,特别是在带宽有限的情况下,为整个服务器的内容创建一个本地镜像,然后再从该镜像同步到客户端(不需要网络),这会是一个比较好的办法。下载一个完整的镜像比下载两个客户端要小,同时可以包含更多的信息。
下面的命令假设了镜像被创建在/usr/local/aosp/mirror。第一步先创建和同步mirror。注意--mirror标志,只有在创建一个新客户端时才能指定这个标志:
$ mkdir -p /usr/local/aosp/mirror
$ cd /usr/local/aosp/mirror
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
$ repo sync
一旦mirror被同步下来,新的客户端可以从它创建。注意指定一个绝对路径很重要:
$ mkdir -p /usr/local/aosp/master
$ cd /usr/local/aosp/master
$ repo init -u /usr/local/aosp/mirror/platform/manifest.git
$ repo sync
最后,从服务器同步到客户端的步骤就分为了两步:先从服务器同步到镜像,再从镜像同步到客户端:
$ cd /usr/local/aosp/mirror
$ repo sync
$ cd /usr/local/aosp/master
$ repo sync
把镜像存储在局域网服务器,然后通过NFS、ssh或者git访问,这是一种方案,另一种方案是:将镜像存在一个移动硬盘上,然后在多用户或多机器间使用该移动硬盘。
六、验证GIT标签
加载以下的公钥到您的GnuPG密钥数据库。该公钥是用来签署代表发布的注释标签。
$ gpg --import
拷贝并粘贴下面的公钥,然后输入EOF(Ctrl -D)来结束输入,然后处理公钥。-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
/HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+
OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
=Wi5D
-----END PGP PUBLIC KEY BLOCK-----
导入公钥后,可以使用下面的命令验证:
$ git tag -v TAG_NAME
如果你没有设置cache,现在是一个好时机来完成它。