網上關於這塊大部分教程都是無效的,因為牆的緣故,無法使用官方提供的下載連結,我這裡使用了清華大學的映象,是能夠順利將 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/
公眾號
我的公眾號:吳小龍同學,歡迎交流~