Android 4.4源碼編譯過程

來源:互聯網
上載者:User

標籤:android   blog   http   使用   strong   檔案   

Android源碼下載完後的目錄如下:

整個代碼的大小為:25.559GB。

 

一、構建系統

如下用於構建Android源碼樹的指令應用於所有的代碼分支,包括master分支。

 

1.選擇分支

構建系統的一些要求是由將要選擇編譯的原始碼的版本決定的。通過網址http://source.android.com/source/build-numbers.html來查看當前Android所有的分支列表。可以選擇下載和構建最新的原始碼(稱為“master”),在這種情況下,當初始化庫時,可直接省去了指定分支參數。

 

一旦選擇好了分支,按照如下的命令來建立構建系統。基本的構建命令序列如下:

 

2.初始化

使用envsetup.sh指令碼來初始化環境,注意可以用“.”字元來代替source。如下:

 

[plain] view plaincopy 
  1. $source build/envsetup.sh  


 

 

[plain] view plaincopy 
  1. $ . build/envsetup.sh  


且後一種簡短格式在檔案中使用的更加頻繁。

 

 

3.選擇目標

使用lunch命令來選擇哪一種目標來構建。確切的配置可以作為參數傳遞給命令,如下:

 

[plain] view plaincopy 
  1. $lunch aosp_arm-eng  

以上的例子指定了構建一個完成的模擬器,其所有的debugging使能,輸入該命令後,

 

 

若lunch後面沒有參數,那麼會通過一個目錄來讓提示讓你選擇。如下:

所有的構建目標是使用BUILD-BUILDTYPE形式,其中BUILD是代碼名表示特定的特徵結合,如下是部分列表:

而BUILDTYPE如下:

更好的關於構建和運行在實際硬體上的資訊,參考:http://source.android.com/source/building-devices.html

 

4. 構建代碼

使用make構建一切,GNU make可以通過使用-jN參數來處理並行任務。此處的N,根據所用的電腦的硬體的核心數來指定,一般N指定為CPU核心的1到2倍。例如在一個dual-5520機器上(2個CPU,每個CPU4個核,每個核2個線程),那麼最快的構建是使用make -j16或make -j32。

 

[plain] view plaincopy 
  1. $make -j4  

 

5.運行

可以在模擬器上運行構建的Android系統,可以flash到裝置上,請注意已經使用lunch命令構建的目標。最好不要把構建的目標運行另一個不同的目標上。

1)類比一個android裝置

編譯完成後,先設定環境變數,在ete/profile中加入如下變數:

然後,敲入如下命令來運行模擬器:

 

[plain] view plaincopy 
  1. $emulator  


2)Flash到裝置上

 

為了Flash到裝置上,需要使用fastboot,成功構建後,該命令包含在你的路徑中。在引導時,要麼通過適當的按鍵組合手動放置裝置到fastboot模式。或者從shell中輸入如下命令進入fastboot模式

 

[plain] view plaincopy 
  1. $adb reboot bootloader  


一旦裝置處於fastboot模式,運行:

 

 

[plain] view plaincopy 
  1. $fastboot flashall -w  

-w選項用於擦去裝置上的/data部分,對於第一次flash一個特定裝置這是有用的,否則不是必需的。

 

更多的關於在實際硬體上構建和啟動並執行資訊,見:http://source.android.com/source/building-devices.html


二、使用ccache

ccache是一個編譯器ccache用於C和C++。可以讓構建更加快速。在原始碼的根目錄處,做如下操作:

 

[plain] view plaincopy 
  1. $export USE_CCACHE=1  
  2. $export CCACHE_DIR=/<path_of_your_choice>/.ccache  
  3. $prebuilts/misc/linux-x86/ccache/ccache -M 50G  

建議的cache大小為50-100G

 

 

可以使用如下操作來查看使用的ccache大小

 

[plain] view plaincopy 
  1. $watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s  

 

若使用Ice Cream Sandwich(4.0.x)或更老的版本,需要用prebuilts來代替prebuilts/misc

 

運行過程中存在的問題:

問題:qemu: could not load initrd ‘ramdisk.img‘

解決方案:

 

進入ramdisk.img所在的目錄(~/my_android/out/target/product/generic/),運行如下命令

 

[plain] view plaincopy 
  1. chmod 777 -R *  



 

且在運行emulator時,加入全路徑名,即可,如下:

 

[plain] view plaincopy 
  1. emulator -kernel /my_android/prebuilts/qemu-kernel/arm/kernel-qemu-armv7 -sysdir /my_android/out/target/product/generic/ -system system.img -data userdata.img -ramdisk /my_android/out/target/product/generic/ramdisk.img -skindir skins/ -skin HVGA -partition-size 768  

其中skins是從SDK目錄中複製過來的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.