Build Android Source Code

本篇文章要介紹如何編譯Android原始碼。

參考網站:
Preparing to Build
編譯 Android AOSP 
如何單獨編譯Android原始碼中的模組

編譯原始碼最主要的目的就是將刷機需要用的image生出來
像是boot.img, recovery.img, system.img等等。

那在開始編譯之前需注意一件事,根據官方的文獻說明,不同的Android版本,對應的Java版本有些許的不同,如下列所示。

The master branch of Android in AOSP:
Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer

Android 5.x ~ Android 6.0 :
Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg

Android 2.3.x ~ Android 4.4.x :
Ubuntu - Java JDK 6, Mac OS - Java JDK 6

Android 1.5 ~ Android 2.2.x :
Ubuntu - Java JDK 5

泰勞本身的開發環境為Ubuntu 14.04與OpenJDK 7

接下來,即將進入第一個步驟!

下載對應的Binaries

Binaries for Nexus Devices去下載合適的binaries
例如:我想編譯Android 6.0.1_r63並將其刷進Pixel C這台機器,那我需要下載的binaries如下圖所示。

下載下來並將其解壓縮至原始碼的根目錄底下,為了確認其為合適的binaries,同時將先前編譯過或已存在的Output刪除,可執行以下指令:

$ make clobber

設定環境

執行build目錄底下的envsetup.sh來初始化環境。


$ source build/envsetup.sh(. ./build/envsetup.sh)

選擇目標版本

$ lunch aosp_arm-eng (若要跑在虛擬機上,建議使用lunch full-eng)

可以只下lunch指令,系統會列出所有版本供開發者選擇。

#編譯類型分為以下三種,通常純粹要做研究的話會建議選擇eng!

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.

更新api/current.txt (此步驟為Optional)

如果有修改framework/base下面的api,需更新api/current.txt文件,否則編譯會中斷並出現編譯錯誤提示,指令如下所示:

$ make update-api

編譯特定模組 (此步驟為Optional)

若有在原始碼裡加入或是修改某個應用程式,就需要單獨編譯。

例如:加入一個Email應用程式於packages/apps/Email

$ mmm packages/apps/Email/

編譯完成之後,就可以在out/target/product/generic/system/app目錄下看到Email.apk文件了,Android系統內建的應用程式都放在這個目錄下。

Build the Code

$ make -j4

編譯的時間通常不會太短,請耐心等待吧!泰勞最近一次的編譯花了將近三個小時。

編譯完成相關檔案會輸出至out/target/product/(TARGET_PRODUCT)

# (TARGET_PRODUCT)預設為generic

留言

這個網誌中的熱門文章

Repo 實用指令

程式語言常用之符號與詞彙 - 中英文對照

什麼是 Bootloader?