鍍金池/ 教程/ Android/ 下載源碼
下載源碼
根據設備構建
Git 資源
構建系統
Android 平臺 64 位構建指導
初始化編譯環(huán)境
Android 源代碼
品牌指南
已知的問(wèn)題
Repo 命令手冊
構建內核
Bug 的生命周期
代碼主線(xiàn)、分支和版本
使用 Eclipse
提交補丁
下載與構建
參與
項目角色
補丁的生命周期
提交 Bugs
關(guān)于代碼風(fēng)格的指導
開(kāi)發(fā)
代碼名稱(chēng),標簽和版本號

下載源碼

Android 的源代碼樹(shù)在 Google 托管的 Git 倉庫中。本文主要闡述如何下載源碼樹(shù)中具體的 Android 代碼。

安裝 Repo

Repo 是一個(gè)方便在 Android 中使用 Git 的工具。想了解更多關(guān)于 Repo 的信息,請參閱 Developing 章節。

如何安裝 Repo:

  1. 確保在你的主目錄下有一個(gè) bin/ 目錄并且它包含在你的路徑中:

      $ mkdir ~/bin
      $ PATH=~/bin:$PATH
  2. 下載 Repo 工具并確保它是可執行的:

    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo

1.17 版本,repo 的 SHA-1 校驗值是ddd79b6d5a7807e911b524cb223bc3544b661c28
1.19 版本,repo 的 SHA-1 校驗值是 92cbad8c880f697b58ed83e348d06619f8098e6c
1.20 版本,repo 的 SHA-1 校驗值是 e197cb48ff4ddda4d11f23940d316e323b29671c
1.21 版本,repo 的 SHA-1 校驗值是 b8bd1804f432ecf1bab730949c82b93b0fc5fede

初始化一個(gè) Repo 客戶(hù)端

安裝完 Repo 之后,建起一個(gè)客戶(hù)端來(lái)訪(fǎng)問(wèn) Android 的源碼倉庫:

  1. 創(chuàng )建一個(gè)空目錄來(lái)存放你的工作文件。如果你使用的是 MacOS,則這個(gè)目錄需要在一個(gè)區分大小寫(xiě)的文件系統上??梢砸匀魏文阆矚g的名稱(chēng)命名:

    $ mkdir WORKING_DIRECTORY
    $ cd WORKING_DIRECTORY
  2. 運行repo init更新最新版本的 Repo 該版本已經(jīng)修復了大量已知 Bug。你必須為 manifest 指定一個(gè) URL ,它指定了 Android 源碼樹(shù)里的各個(gè)倉庫都會(huì )被存放在你工作的目錄下。

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

    要查看 "master" 以外的分支,用 -b 來(lái)指定。想查看分支列表,參閱 Source Code Tags and Builds 。

    $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
  3. 出現提示時(shí),在 Repo 中配置你的真實(shí)姓名和 email 地址。要使用 Gerrit 代碼審查工具,你可能會(huì )需要一個(gè)注冊過(guò) Google 賬戶(hù)的郵箱地址。請確保你能通過(guò)這個(gè)郵箱地址收到消息。這將作為你貢獻代碼的署名出現。

成功初始化的時(shí)候會(huì )顯示這樣的消息狀態(tài)- Repo 已經(jīng)在你的工作目錄下完成了初始化。你的客戶(hù)端目錄下應該會(huì )包含一個(gè) .repo 目錄用來(lái)存放像 manifest 一類(lèi)的文件。

下載 Android 源代碼樹(shù)

要將 manifest 中默認指定的 Android 代碼樹(shù)拉取到你的工作目錄下,請運行:

$ repo sync

你的工作目錄下會(huì )有對應的工程名并存儲了 Android 源碼文件。這個(gè)初始化同步操作大概會(huì )需要一個(gè)小時(shí)或更多的時(shí)間才能完成。想了解更多關(guān)于 Repo sync 的信息和 Repo 的其它指令,請參閱 Developing 章節。

使用認證

通常情況下,訪(fǎng)問(wèn) Android 源碼資源都是匿名的。為了防止服務(wù)器負荷過(guò)大,每個(gè) IP 地址都關(guān)聯(lián)一個(gè) quota。

當和他們共享同一個(gè) IP 地址時(shí)(比如訪(fǎng)問(wèn)代碼倉庫時(shí)越過(guò) NAT 防火墻),即使在正常模式下 quotas 也會(huì )被觸發(fā)(例如許多用戶(hù)在較短時(shí)段里從同一個(gè) IP 地址下創(chuàng )建新客戶(hù)端并發(fā)起同步請求)。

在這種情況下,可以使用授權來(lái)訪(fǎng)問(wèn),每個(gè)用戶(hù)將會(huì )使用一個(gè)獨立的與 IP 地址無(wú)關(guān)的 quota。

第一步首先是使用密碼生成器,然后按照頁(yè)面上的說(shuō)明進(jìn)行操作。

第二步是通過(guò)使用 https://android.googlesource.com/a/platform/manifest 這個(gè) manifest URL 來(lái)進(jìn)行強制授權訪(fǎng)問(wèn)。注意 /a/ 目錄如何進(jìn)行前綴強制觸發(fā)認證。你可以使用下面的指令進(jìn)行強制認證來(lái)轉化你的客戶(hù)端:

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

排除網(wǎng)絡(luò )問(wèn)題

當通過(guò)代理下載的時(shí)候(通常企業(yè)經(jīng)常使用),需要去用 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>

更少見(jiàn)的是,Linux 客戶(hù)端遇到連接問(wèn)題,下載到一半的時(shí)候中止(典型的就是在“正在接受數據”過(guò)程中)。據報道調整 TCP/IP 堆的設置并使用非平行的命令可以改善這個(gè)問(wèn)題。你需要 root 權限訪(fǎng)問(wèn)并修改 TCP 設定:

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

使用一個(gè)本地鏡像

當使用多個(gè)客戶(hù)端時(shí),尤其是在帶寬有限的情況下,最好在本地對整個(gè)服務(wù)器內容創(chuàng )建一個(gè)鏡像,然后從這個(gè)鏡像同步到客戶(hù)端(這樣就不需要網(wǎng)絡(luò )訪(fǎng)問(wèn)權限)。當包含更大量?jì)热莸臅r(shí)候,下載一個(gè)完整鏡像和兩個(gè)客戶(hù)端分別同時(shí)進(jìn)行下載是大致相同的。

這些說(shuō)明假設鏡像在 /usr/local/aosp/mirror 里被創(chuàng )建。第一步是創(chuàng )建一個(gè)鏡像然后對自己進(jìn)行同步。注意 --mirror 標識只可以在創(chuàng )建一個(gè)新客戶(hù)端的時(shí)候被指定:

$ mkdir -p /usr/local/aosp/mirror
$ cd /usr/local/aosp/mirror
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
$ repo sync

一旦鏡像被同步,新的客戶(hù)端就可以從中創(chuàng )建,注意一定要指定一個(gè)絕對路徑:

$ mkdir -p /usr/local/aosp/master
$ cd /usr/local/aosp/master
$ repo init -u /usr/local/aosp/mirror/platform/manifest.git
$ repo sync

最后,客戶(hù)端要對服務(wù)器進(jìn)行同步,鏡像需要對客戶(hù)端進(jìn)行同步,然后客戶(hù)端同步鏡像:

$ cd /usr/local/aosp/mirror
$ repo sync
$ cd /usr/local/aosp/master
$ repo sync

可以將鏡像存儲在一個(gè)局域網(wǎng)服務(wù)器上,然后通過(guò) NFS,SSH 或者 Git 訪(fǎng)問(wèn)它。同樣也可以將它存儲在可移動(dòng)設備上,然后在用戶(hù)或者機器直接傳遞它。

驗證 Git 標記

加載下面的公鑰到你的 GunPG 密鑰庫。這個(gè)密鑰用來(lái)進(jìn)行標簽注釋并簽署發(fā)布。

$ gpg --import

復制粘貼下面的密鑰,然后鍵入 EOF(或者 Ctrl-D)來(lái)結束輸入病保存這個(gè)密鑰。

-----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

如果你還沒(méi)有搭建 ccache,現在是完成他的最好時(shí)機。

上一篇:構建內核下一篇:提交補丁