下載安卓原始碼

Android 原始碼位於 Google 託管的 Git 儲存庫集合中。 Git 儲存庫包含 Android 原始碼的整個歷史記錄,包括對原始程式碼的變更以及更改的時間。本頁介紹如何下載原始碼。

初始化 Repo 客戶端

設定您的客戶端以存取 Android 來源儲存庫:

  1. 建立並導航到工作目錄:

    $ mkdir WORKING_DIRECTORY
    $ cd WORKING_DIRECTORY
    
  2. 初始化原始碼管理的工作目錄:

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

    -b選項用於標識您正在初始化的分支。如果未提供 -b,則repo init預設為主分支。有關分支和標記名稱的列表,請參閱原​​始碼標記和建置

    -u選項是必需的,用於指定清單文件,該文件是一個 XML 文件,指定 Android 原始程式碼中的各個 Git 項目在工作目錄中的放置位置。在此範例中,未指定清單檔案的名稱,因此該指令使用預設清單檔案 ( default.xml )。

    輸出應包含訊息:

    $ repo has been initialized in path_to_working_directory
    

有關清單文件格式的信息,請參閱repo 清單格式

有關所有 Repo 命令的列表,請參閱Repo 命令參考

下載安卓原始碼

執行以下命令將 Android 原始碼樹下載到您的工作目錄:

$ repo sync -c -j8

-c參數指示 Repo 從伺服器取得目前清單分支。 -j8指令將同步分割到執行緒之間以更快完成。

此操作應該需要一個多小時。

如果您在下載過程中遇到任何問題,請參閱解決網路問題

解決網路問題

本部分提供了一些修復可能導致同步失敗的網路問題的建議。

使用身份驗證以避免配額障礙

為了防止伺服器過度使用,用於存取來源的每個 IP 位址都與配額相關聯。

與其他使用者共用 IP 位址時,例如從 NAT 防火牆以外存取來源儲存庫時,可能會觸發正常模式的配額。例如,當多個使用者在短時間內從相同 IP 位址同步新用戶端時,就會觸發配額。

為了避免觸發配額,您可以使用經過身份驗證的訪問,該訪問對每個用戶使用單獨的配額,無論 IP 位址如何。

若要啟用經過身份驗證的存取:

  1. 使用密碼產生器建立密碼。

  2. 執行以下命令將用戶端轉換為使用自動身份驗證(無需更改分支):

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

    請注意, /a/目錄前綴會觸發自動身份驗證。

配置代理使用

如果您從代理程式後面下載原始程式碼(這在某些企業環境中很常見),請確保透過執行以下命令明確指定要供 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

調整 TCP/IP 設定以避免連線問題

雖然這種情況很少見,但 Linux 用戶端可能會遇到連線問題,例如在接收物件時陷入下載過程。若要改善此問題,請調整 TCP/IP 堆疊的設定或使用非平行連線。您必須具有 root 存取權限才能修改 TCP 設定。若要修改設置,請發出以下命令:

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

使用本地鏡像避免網路延遲

使用多個用戶端時,您可以建立整個伺服器內容的本機鏡像,並從該鏡像同步用戶端,而無需存取網路。請按照以下說明在~/aosp-mirror/中建立本機映像並根據該映像同步用戶端:

  1. 建立並同步鏡像:

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

    這些指令在/user/local/aosp/mirror中建立本機鏡像,並使用--mirror標誌和repo init指令來初始化鏡像。

  2. 若要從鏡像同步客戶端:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. 最後,請按照以下命令將鏡像與伺服器同步,並將客戶端與鏡像同步:

    $ cd /usr/local/aosp/mirror</code>
    $ repo sync
    $ cd /usr/local/aosp/main
    $ repo sync
    

可以將鏡像儲存在 LAN 伺服器上並透過 NFS、SSH 或 Git 存取它。也可以將其儲存在可移動磁碟機上,並在使用者或電腦之間傳遞該磁碟機。

使用部分克隆

如果您使用的是 Git 版本 2.19 或更高版本,請在執行repo init時指定--partial-clone以克服任何低延遲網路問題:

  $ repo init -u https://android.googlesource.com/platform/manifest -b main --partial-clone --clone-filter=blob:limit=10M

此命令不是初始化 Repo 來下載所有內容,而是根據需要下載 Git 物件。

下載專有二進位文件

AOSP 可以直接在 Cuttlefish 模擬器上運行,但如果沒有額外的設備特定專有庫,AOSP 就無法在硬體上使用。以下是取得這些設備二進位檔案的方法:

  • 如果您要下載main分支並針對 Nexus 或 Pixel 裝置進行構建,請從二進位檔案預覽網站下載最新的二進位檔案。
  • 如果您要下載並構建main分支並為您自己的設備構建,則必須提供特定於設備的二進位。
  • 如果您要為 Nexus 或 Pixel 裝置下載和建置標記的非主分支和構建,請從Nexus 和 Pixel 裝置的二進位檔案下載裝置特定的二進位檔案。

提取專有二進位文件

每組二進位檔案都是壓縮存檔中的自解壓縮腳本。要提取這些二進位檔案並將其放置在來源樹的正確位置:

  1. 提取存檔。
  2. 從 AOSP 原始碼樹的根執行包含的自解壓縮 shell 腳本。
  3. 同意隨附的授權協議的條款。二進位檔案及其相符的 makefile 安裝在來源樹的vendor/層次結構中。

(可選)驗證程式碼合法性

如果您擔心原始程式碼的合法性,例如它是否來自 Google,您可以驗證分支的 git 標籤。要驗證 Git 標籤:

  1. 將下列金鑰區塊複製並貼上到文字檔案中,例如keyfile.asc

    -----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-----
    
  2. 執行以下命令將公鑰輸入到 GnuPG 密鑰資料庫中。此密鑰用於簽署代表版本的帶註釋的標籤。

    $ gpg --import keyfile.asc
    
  3. 匯入金鑰後,您可以透過執行以下命令來驗證任何標籤:

    $ git tag -v TAG_NAME