先準備必要的工具
要下載 AOSP 的程式碼,你至少需要 curl、git、python 這三個程式。在 Debian 或 Ubuntu 上面你只要使用:
$ sudo apt-get install curl git python
就可以把它們弄到手。接下來我們要先設定 git:
$ git config --global user.name 你的名字
$ git config --global user.email 你的email
下載 repo 版本管理工具
接下來我們必需下載 repo 版本管理工具,我們可以在家目錄之下建立一個資料夾,並把這個資料夾加到 $PATH 裡面:
$ mkdir ~/bin
$ export PATH=~/bin:$PATH
# 備註:你可以把上面這行加到你的 .bashrc,這樣以後要用 repo 的時候就可以直接用。
然後下載 repo 這個工具:
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod +x ~/bin/repo
如果你做到這裡沒有遇到問題就可以開始下載程式碼。如果你遇到 SSL certificate problem 之類的問題可以看下面的常見問題。
開始下載 Android 程式碼
接下來就是這篇文章的重點:下載 Android 程式碼。首先我們先建立一個用來放置 Android 程式碼的資料夾:
$ mkdir ~/android-src
$ cd ~/android-src
初始化 repo 相關的設定:
$ repo init -u https://android.googlesource.com/platform/manifest
接著 repo 會問你一些問題,通常使用預設值就可以了。最後就是按下:
$ repo sync
# 備註:你可以加上 -j2 或 -j4 平行下載。
之後經過漫長的等待,你就會有一份完整的 Android 程式碼!
下一步:你可以參考另一篇文章「編譯 Android AOSP」編譯整個 Android 系統。
--------------------------------------------------
常見問題
為什麼會一直停在 Receiving Objects 且網路毫無動靜?
有時候可能因為 TCP/IP 的實作可能遇上一些意外的問題,所以會一直卡在「Receiving Objects」,可以用以下指令調整 TCP 協定的設定:
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
然後在 repo sync 的時候,只使用單執行緒:
$ repo sync -j1
為什麼會遇到 SSL certificate problem 之類的問題?
如果你遇到 SSL certificate problem 之類的問題,是因為你的系統提供的 curl 沒有內建 cacert 清冊 (也就是 https 憑證發行單位的清冊),curl 沒有辦法驗證 dl-ssl.google.com 的憑證是否正確。
你必需先行下載 cacert.pem。因為 cacert.pem 是防止中間人攻擊的重要機制,所以請務必要確保他的正確性,你可以使用 sha1sum 來檢查:
$ curl http://curl.haxx.se/ca/cacert.pem --ipv4 > ~/cacert.pem
$ sha1sum ~/cacert.pem
286c4a22fe2ed9e3b2d958e2800a8c16d867f063 cacert.pem
然後再使用以下指令下載 repo 這個工具:
$ curl --cacert ~/cacert.pem https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
另外,我們要讓 git 使用這個清冊驗證 Google 的 repository,所以我們要執行以下指令:
$ git config --global http.sslcainfo ~/cacert.pem