通過上篇文章《Android系統6.0源代碼編譯過程分析(1)》分析下載下傳Android6.0系統源碼和編譯源碼的過程,編譯源碼成功後運作模拟器,如圖所示:

經過漫漫長路,終于把下載下傳源碼和編譯源碼搞定了,接下來,繼續分析編譯SDK和核心。
1 編譯SDK
注意:編譯SDK的時候會把之前編譯好的out檔案夾下的部分内容删除重新編譯,讀者可以在編譯SDK之前最好備份out檔案,其實不備份也沒有關系,畢竟源碼經過無數次的修改,才會達到讀者的要求(除非是有的讀者隻看看源碼裡面的結構);不過從第二次開始重新 make -jN 編譯的時候,會編譯快的多。
進入Android源碼目錄檔案夾下,先初始化編譯環境:
source build/envsetup.sh
設定編譯目标:
最後一步開始編譯sdk:
make sdk
編譯成功,如圖所示:
在/out/host/linux-x86/sdk/sdk 目錄下就可以看到編譯好的SDK:
建議把編譯好的SDK也備份一下,以防在以後修改源碼的時候丢失或者損壞。
2 下載下傳、編譯 kernel
(1)下載下傳kernel
在上篇文章《Android系統6.0源代碼編譯過程分析(1)》中,下載下傳下來的Android源代碼,是不包括linux kernel核心代碼的,是使用的谷歌工程師們預先編譯好的核心(在prebuilts/qemu-kernel檔案中),它們是兩個部分。下載下傳下來是為了友善檢視裡面的核心結構。Android源碼預設的核心如圖所示:
可以看出Android6.0是用的3.4版本的核心,是以自己也要下載下傳Android源碼系統對應的核心版本。
下載下傳kernel源碼,初始化倉庫:
如圖所示:
會自動建立一個goldfish目錄,進入goldfish目錄:
cd goldfish
檢視所有分支:
如圖所示:
下載下傳檢出檔案到本地:
如圖所示:
現在kernel源碼就下載下傳到goldfish目錄下了。
(2)編譯核心源碼
在下載下傳好的Android系統源碼目錄中建立kernel檔案夾,把goldfish複制到kernel檔案夾下。
修改goldfish目錄下makefile檔案配置:
sudo gedit Makefile
定位大約第195行:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
更改為
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
進入goldfish目錄,配置環境變量:
export PATH=$PATH:~/android-./prebuilts/gcc/linux-x86/arm/arm-eabi-/bin
編譯:
make goldfish_armv7_defconfig
最後執行:
注意:(/media/wang/d1756fc5-46fe-4779-bee7-3912f0ce4e01/home/wang/)是筆者自己機械硬碟的路徑名稱,請讀者換成自己的,或者用“~”代替
編譯成功,如圖所示:
傳回Android系統源碼目錄,運作模拟器:
source build/envsetup.sh
lunch sdk-eng
emulator -kernel ./kernel/goldfish/arch/arm/boot/zImage & //從核心檔案啟動模拟器
檢視剛編譯過的核心版本資訊,如圖所示:
分析的此次,Android系統源碼下載下傳、源碼編譯、SDK編譯、核心編譯就結束了。接下來,就開始該讀者分析源碼、解讀源碼、修改源碼了。