下面的信息對于構(gòu)建 Android 資源樹的指導(dǎo)適用于各個(gè)分支,包括 master 分支。
有些構(gòu)建工程的環(huán)境所需要的請求,是需要搞清楚你計(jì)劃要編譯這些代碼所使用的版本的。請查看 Codenames,Tags,and Build Numbers 里面完整的分支列表以供你來選擇。你也可以選擇下載,構(gòu)建最新版本源代碼(被稱之為 master),這樣你需要做的僅僅是在初始化倉庫時(shí),刪除之前的分支即可。
當(dāng)已經(jīng)選擇一個(gè)分支后,就跟著下面的指導(dǎo)去創(chuàng)建你的構(gòu)建環(huán)境。
基礎(chǔ)的構(gòu)建命令系列如下所示:
用 envsetup.sh 腳本來初始化環(huán)境。值得注意的是,用 . (一個(gè)單獨(dú)的點(diǎn))來替換 source 節(jié)省一些符號,簡寫也更方便的在說明文檔中使用。
$ source build/envsetup.sh
或者是
$ . build/envsetup.sh
選擇一個(gè)目標(biāo)用 lunch 來建立。明確的配置信息可以通過一個(gè)參數(shù)來實(shí)現(xiàn)。比如像下面的命令:
$ lunch aosp_arm-eng
這個(gè)命令是構(gòu)建一個(gè)模擬器,并且可以使用 debug 模式。
如果使用沒有參數(shù)的 lunch 將會(huì)及時(shí)的提醒你從菜單中選擇一個(gè)目標(biāo)參數(shù)。
所有構(gòu)建目標(biāo)可以從 BUILD-BUILDTYPE,BUILD 是一個(gè)代碼名稱,依賴于特定參數(shù)的混合體。這里是一部分的列表:
| Build name | Device | Notes |
|---|---|---|
| aosp_arm | ARM emulator | AOSP,fully configured with all languages,apps,inputs methods |
| aosp_maguro | maguro | AOSP, running on Galaxy Nexus GSM/HSPA+ ("maguro") |
| aosp_panda | panda | AOSP, running on PandaBoard ("panda") |
下列顯示的是其中一個(gè)的 BUILDTYPE:
| Buildtype | Use |
|---|---|
| user | limited access; suited for production |
| userdebug | like "user" but with root access and debuggability; preferred for debugging |
| eng | development configuration with additional debugging tools |
要想查看更多有關(guān)構(gòu)建以及運(yùn)行在真機(jī)的信息,請看 Building for Devices
用 make 可以完成任何事情。GUN 可以用一個(gè) -jn 參數(shù),傳遞一個(gè)平行的任務(wù),一般來說使用一個(gè)介于 1 和 2 之間的參數(shù) N,乘以在電腦上用于構(gòu)建硬件線程的數(shù)量。比如,在一個(gè) dual-E5520(2 個(gè) cpu,每個(gè) 4 核 ,每核 2 個(gè)線程)上,最快的構(gòu)建是使用命令 make -j16 和 make -j32。
$ make -j4
你既可以運(yùn)行你 build 在模擬器上,也可以在真機(jī)上。請注意你已經(jīng)用 lunch 選中了你需要構(gòu)建的目標(biāo),而且他不大可能運(yùn)行在與構(gòu)建目標(biāo)不相符的地方。
為了在設(shè)備上運(yùn)行,你需要使用 fastboot ,這個(gè)命令需要你在成功構(gòu)建之后,添加到你的 PATH 中。將設(shè)備置于 fastboot 模式,你既可以手工的在根目錄下添加 key,也可以用下面的腳本命令:
$ adb reboot bootloader
一旦設(shè)備在 fastboot 模式下,運(yùn)行
$ fastboot flashall -w
-w 選項(xiàng)用于清除在設(shè)備上 /data 分區(qū);這個(gè)選項(xiàng)很適合第一次刷入真機(jī),但在某些情況下并非必要。
要想查看更多有關(guān)構(gòu)建以及運(yùn)行在真機(jī)的信息,請看 Building for Devices。
模擬器將會(huì)自動(dòng)被構(gòu)建進(jìn)程添加在你的路徑中。要啟動(dòng)模擬器,請輸入:
$ emulator
ccache 是一種編譯緩存,為的是讓 C 和 C++ 更快的構(gòu)建的。在資源樹的根目錄下,按照下面的說明去做:
$ export USE_CCACHE=1
$ export CCACHE_DIR=/<path_of_your_choice>/.ccache
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
建議的緩存大小是 50-100 G。
在 Linux 上,你可以通過以下的操作查看 ccache :
$ watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s
在 Mac OS 上,你應(yīng)該用 darwin-x86 來替換掉 linux-x86。
當(dāng)使用 Ice Cream Sandwich (4.0.x) 或者是這之前的版本時(shí),你應(yīng)該用 prebuilt 來替換掉 prebuilts/misc。
如果你嘗試用與 Android 不對應(yīng)的 Java 版本,make 命令將會(huì)終止,并提示下面的信息:
************************************************************
You are attempting to build with the incorrect version
of java.
Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.
Please follow the machine setup instructions at
https://source.android.com/source/download.html
************************************************************
出現(xiàn)這一現(xiàn)象可能的原因是:
Repo 的基于特殊功能的 Python 2.x,但是不幸的是和 Python 3 相沖突。為了使用 Repo,請安裝 Python 2.x:
$ apt-get install python
如果你正在 Mac OS 上構(gòu)建一個(gè) HFS 文件系統(tǒng),你可能會(huì)偶然遇見下面的錯(cuò)誤:
************************************************************
You are building on a case-insensitive filesystem.
Please move your source tree to a case-sensitive filesystem.
************************************************************
請根據(jù)初始化構(gòu)建環(huán)境中的說明創(chuàng)建一個(gè)敏感的磁盤鏡像。
在大多數(shù) Linux 系統(tǒng)上,沒有特權(quán)的用戶不能通過默認(rèn)的 USB 端口。如果你看見一個(gè)權(quán)限拒絕錯(cuò)誤,請根據(jù)初始化構(gòu)建環(huán)境來配置你的 USB 入口。
如果 adb 已經(jīng)運(yùn)行,并且通過剛才的規(guī)則也不能連接到設(shè)備,這時(shí)可以通過 adb kill-server 命令殺死。這將會(huì)導(dǎo)致 adb 使用新的配置重啟。