接下來的說明來建構Android源代碼tree适用于所有分支,包括master。基本的建構指令序列如下:
Note: 如果你正在建構Android 6.0或更高版本,請參閱使用Jack編譯小節來了解新的預設工具鍊資訊。
擷取專有二進制檔案
僅從純源代碼角度AOSP不能直接使用,它還需使用額外的硬體相關的專業庫才能運作,例如硬體圖形加速。參見下面下載下傳連結小節和額外的資源裝置二進制檔案 。
Note:如果你編譯的源代碼打算運作在真機上,這步是必須的,否則刷機時手機就變磚啦~,如果是運作在模拟器中該步可以跳過。
下載下傳專有二進制檔案
你可以從Google’s Nexus driver page中為運作已标記AOSP釋出分支的支援裝置下載下傳官方二進制檔案。這些二進制檔案增加了通路使用非開源代碼的額外硬體的能力。為了代替建構AOSP master分支,也可以使用Binaries Preview for Nexus Devices 。當為一個裝置建構master分支的時候,使用最近标号的釋出或最新日期的二進制檔案。
提取專有二進制檔案
每一組二進制檔案都是一個壓縮檔案,裡面是一個自解壓腳本。把下載下傳好的二進制檔案拷貝到源代碼根目錄,運作裡面包含的自解壓腳本解壓每個檔案,然後确認你同意閉源許可協定條款。二進制檔案和其比對的makefiles檔案将被初始化在源代碼樹的vendor/hierarchy檔案夾中。
清理
為了确認提取後新初始化的二進制檔案被正确的放到賬戶中,需要删除任何正在使用的預建構的輸出檔案:
$ make clobber
設定環境
使用envsetup.sh腳本來初始化環境。注意這将用.(單獨一個點)代替source,進而節省了一些字元,在文檔中短格式更常用。
$ source build/envsetup.sh
Or
$ . build/envsetup.sh
選擇編譯目标
使用lunch指令來選擇建構目标。精确的配置可以作為參數傳遞。流入下面指令:
$ lunch aosp_arm-eng
這個指令指的是為模拟器建立一個完整的建構,開啟了所有的調試。
如果運作不帶任何參數的lunch指令将提示你從菜單中選擇一個目标。
所有的建構目标都來自BUILD-BUILDTYPE,這裡的BUILD是一個代号,指定了特定功能的組合。
BUILDTYPE是下面中的一個:
Buildtype | Use |
---|---|
user | 限制通路;适用于産品 |
userdebug | like “user” but with root access and debuggability; preferred for debugging |
eng | 帶有額外調試工具的開發配置 |
更多的關于建構和實際硬體上運作的資訊,詳見運作建構.
例如,編譯運作在Nexus 5真機下的Android 4.4.2系統源代碼,可以選擇:

建構代碼
這節隻是一個總結,以確定安裝完成。檢視運作建構來了解關于建構Android更詳細的資訊。
使用make來建構一切。GUN make可以使用一個-JN參數來處理并行任務,這通常多核多線程的建構,例如,在一個dual-E5520機器上(2個CPU,每個CPU 4核,每核2個線程),最快的建構是使用 make –j16 到 make –j32 之間的指令。
$ make -j4
運作
你也可以把你的建構運作在一個模拟器也可以flash到一個裝置上。請注意你已經使用lunch選擇了你的建構目标,是以不大可能把你的建構運作在其他目标上。
Note: 記得擷取專有二進制檔案否則你的建構是必能在你的目标硬體上運作啟動的。如果你這個時候擷取二進制blob,你需要解壓他們,使用make clobber 重新建構。
使用fastboot刷機
為了flash到一個裝置,你需要使用fastboot,當你建構成功後,這個會包含在你的目錄下。參見 運作建構—flash到一個裝置小結了解更多的資訊。
在模拟器上運作
如果,通過建構程序,模拟器已經被自動添加到你的目錄中,為了運作模拟器:
$ emulator