天天看點

編譯Android AOSP代碼

下載下傳完了源代碼,終于到了編譯的階段了。這個階段遠比你想象的簡單,一個make指令就可以完成源代碼的編譯了.參照下面的教程你就可以編譯出适用于android源代碼樹上的所有分支,包括master.基本的編譯流程如下:

用envsetup.sh(它在源代碼根目錄/build下面)腳本初始化環境,注意後面的lunch指令等都跟這一步有沒有執行有關。如果沒有執行後面會提示找不到lunch指令.注意将source替換成.省得打那麼多字,并且這種簡短的方式更常見于文檔中。我們需要進到源代碼的根目錄下,運作下面其中一個指令。

或者

用lunch指令選擇編譯目标.額外的配置可以用參數傳遞。比如下面的指令:

它指的是一個适用于模拟器的完整編譯版本,帶編譯的版本。

如果運作lunch的時候沒有帶任何參數,他就會彈出一個選擇菜單.

lunch menu... pick a combo:

所有的編譯目标的格式都是:build-buildtype,build指的是指定特性的結合,

buildtype是下面列出的其中一個:

buildtype

用途

user

有限的權限;适合一般使用者

userdebug

類似user模式,但有root權限和debug能力,适合debug

eng

帶有額外的debug工具的開發配置。

如果你隻是想編譯出一個可以運作的版本看看效果,那麼可以直接運作lunch aosp_arm-eng,比如我有一個nexus 6p的真機,我就可以運作 lunch aosp_angler-userdebug.

用make編譯所有東西.gnu make 可以使用-jn參數并行地處理,并且他一般用cpu線程數的1~2倍進行編譯.比如在一個dual-e5520機器上(2 cpu,每個cpu 4核,每個核2線程),那麼想讓編譯速度最大化就可以用<code>make -j16</code>或者<code>make -j32</code>.

等待編譯完成後,會産生一些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路徑下)

如果在選擇編譯目标那步選擇了跟特定機型有關的編譯選項,比如nexus 6p,那麼就需要燒錄到裝置上.

如果你的機器是第一次采用fastboot進行刷機,那麼還需要運作下面的指令(要在fastboot模式下)進行bootloader解鎖.bootloader預設是鎖住的.bootloader隻需要解鎖一次,解鎖後就不需要再解鎖了.

解鎖指令跟fastboot的版本有關,你可以運作fastboot不加參數,它會彈出明星提示,看看具體是哪個,按照我的經驗:

版本

指令

在nexus 5x、nexus 6p之前的機器上運作

fastboot oem unlock

nexus 5x、nexus 6p

fastboot flashing unlock

一旦裝置進入fastboot模式, 先進入到産生的img檔案目錄下(一般在源代碼根目錄下面,你可以搜尋),運作

-w 選項清空裝置上的/data分區,在第一次燒錄的時候很有必要,但其他時候就不是必須的.

你可能會好奇,一般不都使用rom檔案(一個zip包)進行刷機嗎,這時候怎麼就直接通過這個指令就行了?

這時候所有的工作就完成了.

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

轉載:http://www.cnblogs.com/kissazi2/p/5244439.html