Mac 下 Android 原始碼編譯從零開始:Day Two--編譯
接下來將兩個壓縮包解壓到原始碼根目錄 WORKING_DIRECTORY
,並分別執行兩個解壓後的 .sh
檔案,cd 到 WORKING_DIRECTORY
目錄,即原始碼根目錄,分別在終端執行以下命令:
sh extract-huawei-angler.sh 複製程式碼
sh extract-qcom-angler.sh 複製程式碼
將驅動檔案提取出來,放到新生成的 /vendor/
目錄下。
每組二進位制檔案都是壓縮包中的一個自解壓指令碼。解壓每個壓縮包,從原始碼樹的根目錄執行附帶的自解壓指令碼,然後確認您同意附帶的許可協議的條款。二進位制檔案及其對應的 Makefile 將會安裝在原始碼樹的 vendor/ 層次結構中。
坑點:需要一直按enter,知道第8點的第e項,慢慢按,直到End,再按一次Enter就會提示你輸入 “I ACCEPT” 來同意使用協議,之後才會提取出驅動檔案到 /vendor/
目錄。
結束時會提示:
······ x vendor/qcom/angler/proprietary/iperf3 x vendor/qcom/angler/device-partial.mk Files extracted successfully. 複製程式碼
如下圖所示:

清理
source.android.com/setup/build…
為了確保新安裝的二進位制檔案在解壓後正確生效,請使用以下命令刪除此前所有編譯操作的已有輸出:
make clobber 複製程式碼
坑點:由於Mac的SDK預設只有14的版本,編譯需要的是14以下的SDK,因此執行 make clobber
時會報如下錯誤:
internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"] 複製程式碼
如圖所示:


make clobber
清理成功如下圖所示:

Final Step: 執行編譯
設定環境 使用 envsetup.sh 指令碼初始化環境。請注意,將 source 替換成 .(一個點)可以省去一些字元,這種簡寫形式在文件中更為常用。
source build/envsetup.sh 複製程式碼
或
. build/envsetup.sh 複製程式碼
選擇目標
使用 lunch 選擇要編譯的目標。確切的配置可作為引數進行傳遞。例如以下命令:
lunch aosp_arm-eng 複製程式碼
該命令表示針對模擬器進行完整編譯,並且所有除錯功能均處於啟用狀態。
如果您沒有提供任何引數就執行命令,lunch 將提示您從選單中選擇一個目標。
所有編譯目標都採用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能組合的代號。
BUILDTYPE 是以下型別之一:

要詳細瞭解如何針對實際硬體進行編譯以及如何在實際硬體上執行版本,請參閱執行版本。
編譯程式碼
請注意,本部分只是一個摘要,用於確保設定已完成。如需關於編譯 Android 的詳細說明,請參閱執行編譯系統。
您可以使用 make 編譯任何程式碼。GNU Make 可以藉助 -jN 引數處理並行任務,通常使用的任務數 N 介於編譯時所用計算機上硬體執行緒數的 1-2 倍之間。例如,在一臺雙核 E5520 計算機(2 個 CPU,每個 CPU 4 個核心,每個核心 2 個執行緒)上,要實現最快的編譯速度,可以使用介於 make -j16 到 make -j32 之間的命令。
make -j4 複製程式碼
坑點:萬事開頭難,事實上運行了幾次都是同一個結果:failed

谷歌查到解決方案:可能是heap size 不足,嘗試修改 heap size 大小。 blog.csdn.net/qq_27061049…
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -mx4096M}" 複製程式碼


執行還是同樣的報錯,說明不是 heap size 不足的問題。
終極解決方案,感謝大神:
內牛滿面,很激動,終於編譯通過了。事實證明,官方文件有很多坑都沒指出來,如果僅僅跟隨官方文件,只能是跟我這樣一路含淚趟坑過來。本教程已經把該遇到的坑都埋了,請盡情享用,有遺漏之處,請不吝指出。
輸入以下命令:
mm 複製程式碼
成功之後提示如下log:
make completed successfully (01:31 (mm:ss)) 複製程式碼
如截圖所示:

接著 Replace prebuilt bison binary with patched binary
cp /Volumes/android/WORKING_DIRECTORY/out/host/darwin-x86/bin/bison /Volumes/android/WORKING_DIRECTORY/prebuilts/misc/darwin-x86/bison/ 複製程式碼
Build
make-j4 複製程式碼
小坑點:到執行 make -j4
命令進行最終編譯前,記得退回到原始碼根目錄,此處為 WORKING_DIRECTORY
正常編譯中的截圖如下所示:

最終編譯成功之後的截圖如下所示:
待補。