AOSP 原始碼下載

吳小龍同學發表於2018-12-26

網上關於這塊大部分教程都是無效的,因為牆的緣故,無法使用官方提供的下載連結,我這裡使用了清華大學的映象,是能夠順利將 AOSP 下載下來。如果你還沒有安裝 Ubuntu,請看《VirtualBox 安裝 Ubuntu》。

下載 repo

Repo 是一款工具,可讓您在 Android 環境中更輕鬆地使用 Git,首先需要安裝 Git:

sudo apt-get install git
複製程式碼

建立 bin,並加入 path:

mkdir ~/bin
PATH=~/bin:$PATH
複製程式碼

下載 repo:

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
複製程式碼

錯誤:

Command 'curl' not found, but can be installed with:

sudo apt install curl
複製程式碼

需要安裝 curl,執行命令sudo apt-get install curl進行安裝。

注意:命令 apt 在低版本 Ubuntu 不行,本教程統一使用命令 apt-get

許可權設定:

chmod a+x ~/bin/repo
複製程式碼

如何驗證 repo 安裝成功

輸入命令repo,提示:

/usr/bin/env: "python": 沒有那個檔案或目錄
複製程式碼

需要安裝 python,執行命令sudo apt-get install python安裝,再次輸入命令repo,提示如下即 repo 安裝成功:

error: repo is not installed.  Use "repo init" to install it here.
複製程式碼

下載原始碼

初始化倉庫

建立工作目錄 AOSP,命令:

mkdir AOSP
cd AOSP
複製程式碼

初始化倉庫:

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
複製程式碼

錯誤

錯誤1

error.GitError: manifests var: 
*** 請告訴我你是誰。

執行

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

來設定您賬號的預設身份標識。
如果僅在本倉庫設定身份標識,則省略 --global 引數。
複製程式碼

沒有設定身份,要使用 Gerrit 程式碼稽核工具,您需要一個與已註冊的 Google 帳號關聯的電子郵件地址:

git config --global user.email "wuxiaolong.me@gmail.com"
git config --global user.name "WuXiaolong"
複製程式碼

其他郵箱應該也是可以的。

錯誤2

fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable
複製程式碼

因為 repo 執行過程中會嘗試訪問官方的 git 源更新自己,如果想使用 tuna 的映象源進行更新,將如下內容複製到你的~/.bashrc裡,然後重啟終端模擬器。

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
複製程式碼

錯誤3:

curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.
複製程式碼

為什麼會出現此種 log ?

在通過 Git 的 HTTP 協議下載最新資料之前,Repo 嘗試下載預先打包的捆綁檔案以引導每個 git。

原文:Repo attempts to download a prepackaged bundle file to bootstrap each git prior to downloading the most recent data via Git's HTTP protocol.

如果捆綁檔案不可用(如本例所示),Repo 將忽略它並繼續進行,換句話說,不要注意這一點。

原文:If a bundle file isn't available (like in this case), Repo will ignore it and proceed anyway. In other words, don't pay any attention to this.

最後,如何取消 download clone.bundle ?

只需要 在repo 新增一個引數 --no-clone-bundle,如下:

可通過 repo -h 獲得引數 --no-clone-bundle 的說明

repo init --no-clone-bundle
repo sync --no-clone-bundle
複製程式碼

指定某個 Android 版本

如果需要某個特定的 Android 版本(列表):

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r1
複製程式碼

提示以下,即 init 成功:

Your identity is: WuXiaolong <wuxiaolong.me@gmail.com>
If you want to change this, please re-run 'repo init' with --config-name

repo has been initialized in /media/disk/Project/AOSP

複製程式碼

疑問

如果沒有指定版本,如何知道下載好的 AOSP 是什麼版本?

找到build/make/core/version_defaults.mk檔案開啟,搜尋PLATFORM_SDK_VERSION,找到了 PLATFORM_SDK_VERSION := 28,從 SDK 版本可以知道 AOSP 版本是 9.0,我下載的就是最新的。

同步程式碼

同步原始碼樹(以後只需執行這條命令來同步):

repo sync
複製程式碼

然後等待下載完畢:

正在檢出檔案: 100% (1709/1709), 完成.
正在檢出檔案: 100% (9492/9492), 完成.在檢出檔案:   2% (251/9492)   
正在檢出檔案: 100% (617/617), 完成.正在檢出檔案:  17% (106/617)   
正在檢出檔案: 100% (15779/15779), 完成.檢出檔案:   7% (1251/15779)   
正在檢出檔案: 100% (29/29), 完成.  正在檢出檔案:  27% (8/29)   
Syncing work tree: 100% (568/568), done. 
複製程式碼

最後整個原始碼大小 27.2 G。

參考

source.android.google.cn/setup/

公眾號

我的公眾號:吳小龍同學,歡迎交流~

AOSP 原始碼下載

相關文章