搭建android編譯環境

原文鏈接:https://source.android.com/setup/initializing.html

本部分介紹瞭如何設置本地工作環境來編譯 Android 源文件。您需要使用 Linux 或 Mac OS。目前不支持在 Windows 環境下進行編譯。

要簡要了解整個代碼審覈和代碼更新流程,請參閱(補丁程序的生命週期)待補充。

選擇分支

針對編譯環境的某些要求是由您打算編譯的源代碼的版本決定的。要查看您可以選擇的分支的完整列表,請參閱【版本號】。您還可以選擇下載並編譯最新的源代碼(稱爲 master)。如果您選擇這麼做,請在初始化存儲庫時直接忽略分支規範。

選擇分支後,請按照下面的相應說明來設置編譯環境。

設置 Linux 編譯環境

以下說明適用於所有分支(包括 master)。

我們會定期在最近推出的一些 Ubuntu LTS (14.04) 版本中對 Android 編譯過程進行內部測試,但大多數 Ubuntu 分發版本都應該有所需的編譯工具。歡迎向我們報告在其他分發版本中的測試結果(無論結果是成功還是失敗)。

如果是 Gingerbread (2.3.x) 及更高版本(包括 master 分支),需要使用 64 位環境。如果是較低的版本,則可以在 32 位系統中進行編譯。

注意:要查看完整的硬件和軟件要求列表,請參閱要求。然後,請按照下方適用於 Ubuntu 和 Mac OS 的詳細說明進行操作。

安裝 JDK

Android 開源項目 (AOSP) 中 Android 的 master 分支在 prebuilts/jdk/ 下有預編譯版本的 OpenJDK。因此,無需再額外安裝。

較低版本的 Android 需要另行安裝 JDK。在 Ubuntu 上,請使用 OpenJDK。要了解確切的版本,請參閱 JDK 要求;要了解相關說明,請參閱以下各個部分。

如果 Ubuntu >= 15.04
請運行以下命令:

sudo apt-get update
sudo apt-get install openjdk-8-jdk

如果是 Ubuntu LTS 14.04
目前沒有適用於 Ubuntu 14.04 的受支持 OpenJDK 8 程序包。但Ubuntu 15.04 OpenJDK 8 軟件包能夠在 Ubuntu 14.04 中順利使用。
我們發現,按照以下說明操作時,更高的程序包版本(例如適合 15.10、16.04 的版本)在 Ubuntu 14.04 中無法正常工作。

  1. 從 old-releases.ubuntu.com 下載適用於 64 位架構的 .deb 軟件包:

    openjdk-8-jre-headless_8u45-b14-1_amd64.deb(SHA256:0f5aba8db39088283b51e00054813063173a4d8809f70033976f83e214ab56c0) 
    openjdk-8-jre_8u45-b14-1_amd64.deb(SHA256:9ef76c4562d39432b69baf6c18f199707c5c56a5b4566847df908b7d74e15849)
    openjdk-8-jdk_8u45-b14-1_amd64.deb(SHA256:6e47215cf6205aa829e6a0a64985075bd29d1f428a4006a80c9db371c2fc3c4c)
    
  2. (可選)對照隨以上每個程序包列出的 SHA256 字符串,確認已下載文件的校驗和。 例如,使用 sha256sum 工具:

    sha256sum {downloaded.deb file}
    

    安裝程序包:

    sudo apt-get update
    

    爲下載的每個 .deb 文件運行 dpkg。運行過程中可能會因缺少依賴項而出現錯誤:

    sudo dpkg -i {downloaded.deb file}
    

    解決缺少依賴項的問題:

    sudo apt-get -f install
    

更新默認的 Java 版本 - 可選
(可選)對於以上 Ubuntu 版本,您可以通過運行以下命令來更新默認的 Java 版本:

    sudo update-alternatives --config java
    sudo update-alternatives --config javac

在編譯過程中,如果您遇到 Java 版本錯誤,請按照【錯誤的 Java 版本部分】中的說明設置其路徑。

(Ubuntu 14.04)

您將需要 64 位版本的 Ubuntu。建議您使用 Ubuntu 14.04。

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

注意:要使用 SELinux 工具進行政策分析,您還需要安裝 python-networkx 軟件包。

注意:如果您使用 LDAP 並且希望運行 ART 主機測試,則還需要安裝 libnss-sss:i386 軟件包。

(Ubuntu 12.04)

您可以使用 Ubuntu 12.04 來編譯較低版本的 Android。master 或最近推出的一些版本不支持 Ubuntu 12.04。

sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

(Ubuntu 10.04 - 11.10)

不再支持在 Ubuntu 10.04-11.10 中進行編譯,但它們仍可用來編譯較低版本的 AOSP。

sudo apt-get install git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc

在 Ubuntu 10.10 中,請運行以下命令:

sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

在 Ubuntu 11.10 中,請運行以下命令:

sudo apt-get install libx11-dev:i386

配置 USB 使用權限

按照說明設置用於開發的設備,以安裝適用於所有 Android 設備且由社區維護的默認 udev 規則集。

使用單獨的輸出目錄

默認情況下,每次編譯的輸出都會存儲在相應源代碼樹的 out/ 子目錄下。

在一些擁有多個存儲設備的計算機上,如果將源文件和輸出存儲在單獨的存儲卷中,編譯速度會更快。若要進一步提高編譯速度,可以將輸出存儲在已針對速度(而非崩潰穩定性)進行優化的文件系統中,這是因爲在文件系統損壞時可以重新生成所有文件。

要進行這項設置,請導出 OUT_DIR_COMMON_BASE 變量,使其指向將存儲輸出目錄的位置。

export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>

對於每個單獨的源代碼樹,其輸出目錄都將以其存放目錄命名。

例如,如果您有源代碼樹 /source/master1 和 /source/master2,並且 OUT_DIR_COMMON_BASE 設爲了 /output,那麼輸出目錄將爲 /output/master1 和 /output/master2。

在這種情況下,切勿將多個源代碼樹存儲在具有相同名稱的目錄下,否則會導致輸出目錄共享終止,並且會出現不可預知的結果。

只有 Jelly Bean (4.1) 及更高版本(包括 master 分支)支持這種做法。

設置 Mac OS 編譯環境

在默認安裝過程中,Mac OS 會在一個保留大小寫但不區分大小寫的文件系統中運行。Git 並不支持此類文件系統,而且此類文件系統會導致某些 Git 命令(例如 git status)的行爲出現異常。因此,我們建議您始終在區分大小寫的文件系統中對 AOSP 源文件進行操作。使用下文中介紹的磁盤映像可以非常輕鬆地做到這一點。

有了適當的文件系統,在新型 Mac OS 環境中編譯 master 分支就會變得非常簡單。要編譯較低版本的分支,則需要一些額外的工具和 SDK。

創建區分大小寫的磁盤映像
您可以使用磁盤映像在現有的 Mac OS 環境中創建區分大小寫的文件系統。要創建磁盤映像,請啓動磁盤工具,然後選擇“新建映像”。完成編譯至少需要 25GB 空間;更大的空間能夠更好地滿足未來的需求。使用稀疏映像有助於節省空間,而且以後可以隨着需求的增加進行擴展。請務必選擇“Case sensitive, Journaled”存儲卷格式。

您也可以通過 shell 使用以下命令創建磁盤映像:

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg

這將創建一個 .dmg(也可能是 .dmg.sparseimage)文件,該文件在裝載後可用作具有 Android 開發所需格式的存儲卷。

如果您以後需要更大的存儲卷,還可以使用以下命令來調整稀疏映像的大小:

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

對於存儲在主目錄下的名爲 android.dmg 的磁盤映像,您可以向 ~/.bash_profile 中添加輔助函數:

要在執行 mountAndroid 時裝載磁盤映像,請運行以下命令:

  # mount the android file image
   mountAndroid() { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }

注意:如果系統創建的是 .dmg.sparseimage 文件,請將 ~/android.dmg 替換爲

~/android.dmg.sparseimage。

要在執行 umountAndroid 時卸載磁盤映像,請運行以下命令:

# unmount the android file image
umountAndroid() { hdiutil detach /Volumes/android; }

裝載 android 存儲卷後,您將在其中開展所有工作。您可以像對待外接式存儲盤一樣將其彈出(卸載)。

安裝 JDK
要查看要在開發各種 Android 版本時使用的 Java 版本,請參閱相關要求。

安裝所需的程序包
使用以下命令安裝 Xcode 命令行工具:

xcode-select --install

對於較低版本的 Mac OS(10.8 或更低版本),您需要通過 Apple 開發者網站安裝 Xcode。如果您尚未註冊成爲 Apple 開發者,則需要創建一個 Apple ID 才能下載。

通過 macports.org 安裝 MacPorts。

注意:請確保在路徑中 /opt/local/bin 顯示在 /usr/bin 之前。否則,請將以下內容添加到 ~/.bash_profile 文件中:

export PATH=/opt/local/bin:$PATH

注意:如果主目錄中沒有 .bash_profile 文件,請創建一個。

通過 MacPorts 獲取 Make、Git 和 GPG 程序包:

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

如果您使用 Mac OS X v10.4,還需要安裝 bison:

POSIXLY_CORRECT=1 sudo port install bison

將 make 3.82 還原到較低版本
在 Android 4.0.x (Ice Cream Sandwich) 及更低版本中,gmake 3.82 中存在一個會導致 Android 無法編譯的錯誤。您可以按照以下步驟使用 MacPorts 來安裝 3.81 版:

修改 /opt/local/etc/macports/sources.conf,在 rsync 行上方添加下面這行內容:

file:///Users/Shared/dports

。然後創建該目錄:

mkdir /Users/Shared/dports

在新的 dports 目錄下,運行以下命令:

svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/

爲新的本地存儲庫創建一個端口索引:

portindex /Users/Shared/dports

使用以下命令安裝舊版 gmake:

sudo port install gmake @3.81

設置文件描述符數量上限
在 Mac OS 中,可同時打開的文件描述符的默認數量上限太低,在高度並行的編譯流程中,可能會超出此上限。

要提高此上限,請將下列行添加到 ~/.bash_profile 中:

# set the number of open files to be 1024
ulimit -S -n 1024

優化編譯環境(可選)

設置 ccache

您可以視需要指示編譯過程使用 ccache 編譯工具,ccache 是適用於 C 和 C++ 的編譯器緩存,有助於提高編譯速度。這對於編譯服務器和其他高容量生產環境來說尤其有用。ccache 可用作用於加快重新編譯速度的編譯器緩存。 如果您經常使用 make clean,或者經常在不同的編譯產品之間切換,則非常適合使用 ccache。

注意:如果您是在執行增量編譯(例如個人開發者而非編譯服務器),ccache 可能會讓您爲緩存未命中埋單,從而減慢您的編譯速度。

要使用 ccache,請在源代碼樹的根目錄下執行以下命令:

export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

建議的緩存大小爲 50G 到 100G。

請將以下內容添加到 .bashrc(或等同文件)中:

export USE_CCACHE=1

默認情況下,緩存將存儲在 ~/.ccache 下。 如果您的主目錄位於 NFS 或一些其他的非本地文件系統中,您還需要在 .bashrc 文件中指定目錄。

在 Mac OS 中,您應將 linux-x86 替換成 darwin-x86:

prebuilts/misc/darwin-x86/ccache/ccache -M 50G

在編譯 Ice Cream Sandwich (4.0.x) 或更低版本時,ccache 位於其他位置:

prebuilt/linux-x86/ccache/ccache -M 50G

該設置會存儲在 CCACHE_DIR 中,並且爲永久設置。

在 Linux 中,您可以運行以下命令來觀看使用 ccache 時的情況:

watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章