Build Android Source Code
本篇文章要介紹如何編譯Android原始碼。
參考網站:
Preparing to Build
編譯 Android AOSP
參考網站:
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
執行build目錄底下的envsetup.sh來初始化環境。
選擇目標版本
可以只下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文件,否則編譯會中斷並出現編譯錯誤提示,指令如下所示:
編譯原始碼最主要的目的就是將刷機需要用的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
編譯的時間通常不會太短,請耐心等待吧!泰勞最近一次的編譯花了將近三個小時。
編譯完成相關檔案會輸出至out/target/product/(TARGET_PRODUCT)
# (TARGET_PRODUCT)預設為generic
Build the Code
$ make -j4
編譯的時間通常不會太短,請耐心等待吧!泰勞最近一次的編譯花了將近三個小時。

編譯完成相關檔案會輸出至out/target/product/(TARGET_PRODUCT)
# (TARGET_PRODUCT)預設為generic
留言
張貼留言