編譯Android AOSP代碼

下載完了源代碼,終於到了編譯的階段了。這個階段遠比你想象的簡單,一個make命令就能夠完成源代碼的編譯了.參照下面的教程你就能夠編譯出適用於Android源代碼樹上的全部分支,包括master.基本的編譯流程以下:html

準備編譯環境

用envsetup.sh(它在源代碼根目錄/build下面)腳本初始化環境,注意後面的lunch命令等都跟這一步有沒有執行有關。若是沒有執行後面會提示找不到lunch命令.注意將source替換成.免得打那麼多字,而且這種簡短的方式更常見於文檔中。咱們須要進到源代碼的根目錄下,運行下面其中一個命令。android

$ source build/envsetup.sh

或者工具

$ . build/envsetup.sh

選擇編譯目標

用lunch命令選擇編譯目標.額外的配置能夠用參數傳遞。好比下面的命令:ui

$ lunch aosp_arm-eng

它指的是一個適用於模擬器的完整編譯版本,帶編譯的版本。命令行

若是運行lunch的時候沒有帶任何參數,他就會彈出一個選擇菜單.線程

Lunch menu... pick a combo:debug

1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
4. aosp_mips64-eng
5. aosp_x86-eng
6. 省略一些選項...
17. aosp_angler-userdebug

全部的編譯目標的格式都是:BUILD-BUILDTYPE,BUILD指的是指定特性的結合,code

BUILDTYPE是下面列出的其中一個:htm

Buildtype 用途
user 有限的權限;適合通常用戶
userdebug 相似user模式,但有root權限和debug能力,適合debug
eng 帶有額外的debug工具的開發配置。

若是你只是想編譯出一個能夠運行的版本看看效果,那麼能夠直接運行lunch aosp_arm-eng,好比我有一個Nexus 6p的真機,我就能夠運行 lunch aosp_angler-userdebug.教程

注意:執行lunch命令的時候,彈出Can not find SDK 10.6錯誤,具體的解決方法見Android編譯過程當中的碎碎念.
更多關於編譯和真機運行的內容,看 Running Builds.

編譯代碼

用make編譯全部東西.GNU make 可使用-jN參數並行地處理,而且他通常用CPU線程數的1~2倍進行編譯.好比在一個dual-E5520機器上(2 CPU,每一個CPU 4核,每一個核2線程),那麼想讓編譯速度最大化就能夠用make -j16或者make -j32.

$ make -j4

等待編譯完成後,會產生一些txt、img文件,android-info.txt、cache.imgramdisk-recovery.img、recovery.img、userdata.img
boot.img、ramdisk.img 、system.img。這些文件跟後面燒錄的過程有關,很是重要.通常他們在源代碼路徑下的out文件夾中。好比我以前輸入lunch aosp_angler-userdebug,那麼就會生成在 「源代碼根目錄/out/debug/target/product/angler」,你也能夠用源代碼根目錄下輸入 find . -name system.img查找.

[Uploading Snip20160214_7_020290.png . . .]

開始運行!

你能夠直接在模擬器上運行或者將他燒錄到一個設備上。要注意以前已經用lunch選擇了特定的設備,否則他就極可能不能運行不一樣的編譯目標上。

運行模擬器

若是在選擇編譯目標那一步選擇的是lunch aosp_arm-eng.那麼這時候就能夠直接輸入emulator命令來運行模擬器了(emulator命令在編譯過程當中會自動添加到Path路徑下)

$ emulator

刷機

若是在選擇編譯目標那步選擇了跟特定機型有關的編譯選項,好比Nexus 6P,那麼就須要燒錄到設備上.

進入fastboot模式

爲了燒錄到設備上,你須要使用fastboot,在成功編譯後他就會在path路徑下。把設備弄到fastboot模式下,要嘛手動按特定的組合鍵(對於Nexus系列能夠參考這裏),要嘛使用命令行以下:

$ adb reboot bootloader

解鎖bootloader

若是你的機器是第一次採用fastboot進行刷機,那麼還須要運行下面的命令(要在fastboot模式下)進行bootloader解鎖.bootloader默認是鎖住的.bootloader只須要解鎖一次,解鎖後就不須要再解鎖了.

解鎖命令跟fastboot的版本有關,你能夠運行fastboot不加參數,它會彈出明星提示,看看具體是哪一個,按照個人經驗:

版本 命令
在Nexus 5x、Nexus 6p以前的機器上運行 fastboot oem unlock
Nexus 5x、Nexus 6p fastboot flashing unlock

一旦設備進入fastboot模式, 先進入到產生的img文件目錄下(通常在源代碼根目錄下面,你能夠搜索),運行

$ fastboot flashall -w

-w 選項清空設備上的/data分區,在第一次燒錄的時候頗有必要,但其餘時候就不是必須的.
你可能會好奇,通常不都使用rom文件(一個zip包)進行刷機嗎,這時候怎麼就直接經過這個命令就好了?
是的,更具體的解釋能夠見Android編譯過程當中的碎碎念.

更多關於編譯和運行在真實設備上的東西,請查看running builds.

這時候全部的工做就完成了.

相關文章
相關標籤/搜索