初始化一個構建環境
“入門”部分描述如何在你的機器上建立你的本地工作環境,如何使用 Repo 擷取 Android 檔案和如何構建這些檔案構建 Android 源檔案,你將需要用Linux 或 Mac OS。在 Windows 下構建,當前是不支援的。
注意:源下載大約 6GB 大小,你將需要 25GB 閒置完成一個單一構建,和高達 90GB (或更多)來全套構建。
整個代碼審查和代碼更新過程的一個概述,看一個補丁的壽命。
選擇一個分支
你構建環境的要求,由你計劃編譯哪個版本的源碼決定。看一個全版本的構建數,你可一從這裡選擇一個分支。你也可以選擇下載和構建最新源碼(稱為 "master"),在這種情況下,你將簡單的忽略分支版本規範,當你初始化庫。
一旦你選擇了一個分支,跟著下面恰當的只是建立你的構建環境。
建立一個 Linux 構建環境
這些描述適用於所有分支,包括主分支。
Android 構建是內部常規測試在 Ubuntu LTS (10.04),但是大多數發行應該提供有效構建工具。提交成功或失敗在其它分布是歡迎的。
Gingerbread (2.3.x) 和最新的版本,包括主分支,一個64位環境是必須的。舊的版本可以在32位系統上編譯。
注意:這也可能構建 Android 在一個虛擬機器。假如你運行 Linux 在一個虛擬機器,為了構建 Android樹你將需要至少 16GB 的 RAM/swap 和 30GB 或更多磁碟空間。
一般情況下你將需要:
Python 2.5 -- 2.7,你能下載從 python.org.
GNU Make 3.81 -- 3.82,你能下載從 gnu.org,
JDK 6 假如你想構建 Gingerbread 或更新的; JDK 5 Froyo 或舊的。你可以下載這兩個一起從
java.sun.com.
Git 1.7 或更新。你能發現它在 git-scm.com.
詳細描述 Ubuntu 10.04+ 如下。
安裝 JDK
Sun JDK 不再在 Ubuntu 的主包庫。為了下載它,你需要添加合適的庫並支援系統應使用哪個 JDK。
Java 6: Gingerbread和更新
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"$ sudo apt-get update$ sudo apt-get install sun-java6-jdk
Java 5:對於 Froyo和以前
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"$ sudo apt-get update$ sudo apt-get install sun-java5-jdk
注意:lunch 命令在構建步驟裡將確保 Sun JDK 用來替代任何先前安裝的 JDK。
安裝需要的包 (Ubuntu 10.04 -- 11.10)
你將需要一個64位版本的 Ubuntu。 Ubuntu 10.04 是被推薦的。構建用一個Ubuntu的較新版本是當前僅僅是當前實驗支援的,並不保證工作在主分支外的分支。
$ sudo apt-get install git-core 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
安裝需要的包 (Ubuntu 12.04)
構建在 Ubuntu 12.04 上是當前僅僅實驗支援的,並不保證工作在主分支外的分支。
$ sudo apt-get install git-core 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 openjdk-6-jdk 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
配置 USB訪問
GNU/linux 系統下(指定 Ubuntu 系統下),預設普通使用者不能直接存取 USB 裝置。該系統需要被指允許這樣的訪問。
推薦的方法是建立一個檔案 /etc/udev/rules.d/51-android.rules (作為 root 使用者)和複製下面的行到裡面。<username> 必須被替換為實際的使用者名稱,被授權訪問手機上的 USB。
# adb protocol on passion (Nexus One)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"# fastboot protocol on passion (Nexus One)SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"# adb protocol on crespo/crespo4g (Nexus S)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"# fastboot protocol on crespo/crespo4g (Nexus S)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"# adb protocol on stingray/wingray (Xoom)SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"# fastboot protocol on stingray/wingray (Xoom)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"# adb protocol on maguro/toro (Galaxy Nexus)SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"# fastboot protocol on maguro/toro (Galaxy Nexus)SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"# adb protocol on panda (PandaBoard)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"# fastboot protocol on panda (PandaBoard)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"# usbboot protocol on panda (PandaBoard)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"# usbboot protocol on panda (PandaBoard ES)SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
這些新規則在下一次裝置插入時生效。可能因此需要拔下裝置插回電腦。
已知工作在包括 Ubuntu Hardy Heron (8.04.x LTS) 和 Lucid Lynx (10.04.x LTS)。其它版本的 Ubuntu 或其它變種的 GNU/linux 可能需要不同的配置。
建立 ccache
你能選擇性的告訴使用 ccache 編譯工具構建。Ccache 扮演一個編譯器緩衝,能被用來提速重構建。假如你經常"make clean",它工作的非常好,或者你頻繁在兩個不同的構建產品之間切換。
放下面的到你的 .bashrc 或相同。
export USE_CCACHE=1
預設,緩衝將被儲存在 ~/.ccache。假如你的 home 目錄是基於 NFS 或一些其它的非本地化檔案系統,以及你將要指定目錄在你的 .bashrc。
export CCACHE_DIR=<path-to-your-cache-directory>
建議的緩衝大小是 50-100GB。一旦你下載了源碼,你將需要運行下面的命令。
prebuilt/linux-x86/ccache/ccache -M 50G
這設定儲存在 CCACHE_DIR 和是持久的。
用一個單獨輸出目錄
預設,每個構建的輸出被儲存在每個機器源碼樹子目錄的 out/中。
在一些多存放裝置的機器上,構建是快速的,當儲存源檔案和輸出在單獨的卷。額外的效能,輸出能被儲存在一個為速度最佳化的檔案系統中,代替突然的意外,因為所有檔案能在檔案系統毀壞的情況下被重建。
設定這些,出口 OUT_DIR_COMMON_BASE 變數只想你將要儲存輸出目錄的地方。
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
每個單獨的源樹輸出目錄將被命名在目錄保持源碼樹之後。
例如,假如你有源樹為 /source/master1and /source/master2 和
OUT_DIR_COMMON_BASE 是設定為 /output,輸出目錄將是 /output/master1and/output/master2.
它的重要在這種情況,沒有多源樹保額哦存在相同名稱的目錄,為這些將要結束共用一個輸出目錄,不可預知的結果。
這僅僅支援在比 4.0.x(IceCreamSandwich)新的分支。
建立一個 Mac OS X 構建環境
在一個預設的安裝,OS X 運行在一個保留的情況,但是不區分大小寫檔案系統。這種類型的檔案系統不知吃 git 和將因為一些 git 命令(例如 "git status")表現異常。因為這,我們推薦你總是工作在 AOSP 源檔案在區分大小寫檔案系統。這能夠相當簡單用一個磁碟鏡像,討論如下。
一旦恰當的檔案系統是有效,構建主分支在一個現代化的 OS X 環境是非常簡單的。早期的分支,包括 ICS,需要一些附件和 SDK。
建立一個大小寫敏感的磁碟鏡像
你能建立一個大小寫敏感的檔案系統用你的現有 OS X 環境用一個磁碟鏡像,運行 DiskUtility 並且選擇 "New Image",一個大小為 25GB 是最小的完成構建,更大的數字是更多的面向未來。用稀疏的鏡像儲存空間當允許增長後作為需要出現。確定選擇 "case sensitive, journaled" 作為卷格式。
你也能建立它從一個 shell 用下面的命令:
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
這將建立一個 .dmg (或可能一個 .dmg.sparsefile)檔案,一段掛載,扮演一個裝置,需要為 Android 開發格式化。一個磁碟鏡像名為"android.dmg" 儲存在你的 home 目錄,你能添加下面的到你的 ~/.bash_profile 來掛載這個鏡像,當你執行 "mountAndroid":
# mount the android file imagefunction mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
掛載一次,你將做你所有的工作在 "android" 卷。你能彈出它(卸載它)僅僅像你願意,如同一個外部裝置。
主分支
構建最新源碼在一個 Mac OS 環境,你將需要一個 Intel/x86 機器運行 MacOS 10.6 (Snow Leopard) 或 MacOS 10.7 (Lion),隨著 Xcode4.2 (蘋果的開發工具)。雖然 Lion 沒有一個 JDK,它將自動安裝,當你嘗試建立源。
Mac OS X 的其餘部分僅僅應用在其他希望構建分支版本。
分支 4.0.x 和所有更早分支
構建 android-4.0.x 和更早分支在一個ie Mac OS 環境,你需要 anIntel/x86 機器運行 MacOS 10.5 (Leopard) 或 MacOS 10.6 (Snow Leopard)。你將需要 MacOS 10.5 SDK.
安裝需要的包
安裝 Xcode 從 蘋果開發人員網站。我們推薦版本 3.1.4 或更新,即 gcc 4.2。 版本 4.x 可能導致困難。假如你沒有已經註冊為一個蘋果開發人員,你將需要建立一個蘋果 ID 為了下載。
安裝 MacPorts 從 macports.org.
注意:確定 /opt/local/bin 出現在你的路徑 BEFORE/usr/bin。假如沒有,添加
export PATH=/opt/local/bin:$PATH
到你的 ~/.bash_profile。
擷取 make,git,和 GPG 包從 MacPorts:
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg
假如使用 Mac OS 10.4,還有安裝 bison:
$ POSIXLY_CORRECT=1 sudo port install bison
還原從 make 3.82
ICS 之前的 Android 版本,這有一個 bug 在 gmake 3.82 ,防止 android 構建。你能安裝版本 3.81 用 MacPorts 按照下面的步驟:
編輯 /opt/local/etc/macports/sources.conf 和一行見解
file:///Users/Shared/dports
rsync 線上面,然後建立這個目錄:
$ 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
設定一個檔案描述極限
MacOS 上,預設限制同時開啟的檔案描述符數量太低,一個高並行構建構成可能超過這個限制。
提高上線,添加下面的行到你的 ~/.bash_profile:
# set the number of open files to be 1024ulimit -S -n 1024
下面:下載源
你的構建環境做的好!,繼續下載源....