应该说笔者自己走了好多弯路终于下到了安卓的源码,发现网上的好多说法都过时了。在这里特别感谢公司的一位大侠,他对我说了一句话,我觉得很有道理,你所有需要的答案基本上都可以在http://developer.andorid.com上可以找到。
下载的过程是按照官网说明一步步下来的很顺利。
官网链接如下:
http://source.android.com/source/downloading.html
操作系统:windows xp
软件: Cgywin
笔者其实是很担心自己的英语水平的,6级基本上是靠猜出来的。也有N年不碰英文了。
笔者将这个翻译献给自己,也同时献给走在奋斗路上的你,come on!
Repo使Git在android环境下工作更加容易。如果您想获得更多关于Repo的信息,可以看看Version Control。
请按照如下步骤安装,初始化,配置Repo。
笔者的目录如下:
$ mkdir /home/android //创建自己的安卓工作目录
$ cd /home/android
$ mkdir bin //创建自己的bin目录,用于存放Repo
$ PATH=/home/android/bin:$PATH //将自己的bin目录加入环境变量
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo >/home/android/bin/repo //将repo下载至自己的工作目录下
$ chmod a+x /home/android/bin/repo //设置repo为可执行,笔者对linux基本没什么涉略,哈哈,客串一下
笔者自己没有校验,直接略过。
在安装了repo的客户端之后,开始设置你的客户端以访问android源码目录。
$ mkdir /home/android //如果你有这个目录了,那么就请跳过
$ cd /home/android/bin
$ repo init -u https://android.googlesource.com/platform/manifest //将会下载android的若干源码目录列表
为了检查除了父目录的所有分支,用参数“-b”指定:(该句翻译不确定,原文如下:To check out a branch other than "master", specify it with -b:)
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 //检索android-4.0.1_r1目录
成功安装之后,将会有一个消息提示你已经把repo安装到你的工作目录下了。你的工作目录将包括一个.repo目录,像manifest这样的文件会保存在这这个目录中。
为了将manifest中指定的库下载到您的本地工作目录,请运行:
$ repo sync nbsp; //下载指定库到本地
Android的源码将放置至工作目录下的相应路径。最开始的sync操作将会花费一个小时甚至更多。如果想要知道repo sync或者更新命令,请看Version control。
在默认情况下,对android源码访问都是匿名的。为了保护服务器免受过激的攻击,每个IP都是有一定的限额。
当与别人一起共享受用一个IP的时候(如通过NAT防火墙来访问那些源码库),即使是正常的使用也会达到那个限额(如许多用户同时通过一个IP访问。)。
在这种情况下,使用授权的使用授权的访问,为每个用户分配一定的配额且与IP无关。
第一步通过密码生成器生成你的密码,并将它根据该网页的说明保存在~/.netrc中。
第二步是通过如下的URI: manifest URI: https://android.googlesource.com/a/platform/manifest访问。如下将说明怎么触发授权的访问。你可以通过如下的命名转化成使用授权的访问:
$ repo init -u https://android.googlesource.com/a/platform/manifest
当通过一个代理来下载的时候,需要明确的指定被repp使用的代理服务器:
$ 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客户端会有网络连接上或者下载中断的一些问题。据说调整TCP/IP的栈设置或者使用类似的命令有助于解决这些问题。当你修改这些设置的时候,是需要root权限的。
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1
当有许多中断的时候,尤其是网络带宽非常有限的情况下,创建一个服务端的镜像并且都从那个镜像同步将会是个很好的主意。
如下质量假设那些镜像将会创建在/usr/local/aosp/mirror。第一步是创建并同步那个有10G宽带或者相同数量的硬盘空间的镜像。注意,--mirror标志只能在创建一个新的客户端的时候才能指定。
$ mkdir -p /usr/local/aosp/mirror
$ cd /usr/local/aosp/mirror
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
$ repo sync
一旦镜像同步了,新客户端就可以从这里创建了。注意:指定一个绝对路径非常重要。
$ 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
在LAN服务器上保存一个镜像并通过NFS, SSH or Git访问是有可能的。一个镜像也可以保存在一个远程硬盘中,并可以在各个用户和机器之间访问。
将如下公共密钥导入您的GnuPG密钥数据库。那个密钥将会在您的有注释的tags上添加,并在releases中展现。
$ 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-----
在导入了该密钥之后,你可以用如下指令校验任何的tag目录:
$ git tag -v TAG_NAME
如果你还没有设置过ccache,现在将会是个不错的时机。
如果你对内核代码感兴趣,那么你可以通过如下的一系列命令来获取。
$ git clone https://android.googlesource.com/kernel/common.git
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git