標籤: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
- $source build/envsetup.sh
或
[plain] view plaincopy
- $ . build/envsetup.sh
且後一種簡短格式在檔案中使用的更加頻繁。
3.選擇目標
使用lunch命令來選擇哪一種目標來構建。確切的配置可以作為參數傳遞給命令,如下:
[plain] view plaincopy
- $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
- $make -j4
5.運行
可以在模擬器上運行構建的Android系統,可以flash到裝置上,請注意已經使用lunch命令構建的目標。最好不要把構建的目標運行另一個不同的目標上。
1)類比一個android裝置
編譯完成後,先設定環境變數,在ete/profile中加入如下變數:
然後,敲入如下命令來運行模擬器:
[plain] view plaincopy
- $emulator
2)Flash到裝置上
為了Flash到裝置上,需要使用fastboot,成功構建後,該命令包含在你的路徑中。在引導時,要麼通過適當的按鍵組合手動放置裝置到fastboot模式。或者從shell中輸入如下命令進入fastboot模式
[plain] view plaincopy
- $adb reboot bootloader
一旦裝置處於fastboot模式,運行:
[plain] view plaincopy
- $fastboot flashall -w
-w選項用於擦去裝置上的/data部分,對於第一次flash一個特定裝置這是有用的,否則不是必需的。
更多的關於在實際硬體上構建和啟動並執行資訊,見:http://source.android.com/source/building-devices.html
二、使用ccache
ccache是一個編譯器ccache用於C和C++。可以讓構建更加快速。在原始碼的根目錄處,做如下操作:
[plain] view plaincopy
- $export USE_CCACHE=1
- $export CCACHE_DIR=/<path_of_your_choice>/.ccache
- $prebuilts/misc/linux-x86/ccache/ccache -M 50G
建議的cache大小為50-100G
可以使用如下操作來查看使用的ccache大小
[plain] view plaincopy
- $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
- chmod 777 -R *
且在運行emulator時,加入全路徑名,即可,如下:
[plain] view plaincopy
- 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目錄中複製過來的。