Mac OS X 10.8.4下Android4.2.2原始碼下載與編譯
最近打算辭職了,離開一直在廈門實習的公司。本來這個月轉正,但我的內心告訴我,廈門太安逸了點。我必須去外面闖闖,還年輕啊,不想以後後悔。在這兩天不記得看到什麼東西需要Android原始碼。然後心血來潮打算編譯下Android原始碼,畢竟以前編譯失敗過,有點不服輸。下面記錄下這次的一點心得吧。
一、環境配置
電腦: MacBook Pro 2.5GHz Intel Core i5
記憶體:4GB 1600 MHz DDR3
OS: Snow Leopard 10.8.4
XCode: 4.6.4
JDK:1.6 這個必須是1.6版本。如果是1.7的話要另外安裝1.6版本,並設定為預設版本,不會的我稍後介紹方法。
二、設定Mac OS X的編譯環境
這裡特別要強調一下Android原始碼必須在大小寫敏感的檔案系統下編譯,而Mac OS預設不是大小寫敏感的,因此需要建立
一個大小寫敏感的磁碟映象檔案。具體方法有兩種:一種是用命令建立,還有一種就是用系統自帶的磁碟管理工具。
命令方法:用hdiutil create命令,我嘗試過,但失敗了,有誰知道麻煩告訴我下。
磁碟工具:進入應用程式/實用工具/磁碟工具,選擇檔案->新建->新建空白映像
點選建立,ok,建立好了。磁碟映象檔案儲存在當前使用者根目錄下,我的是在/ywen目錄下。我們需要其將掛載到某個目錄下面,在終端進入建立的磁碟映象檔案目錄,輸入
三、下載Android 4.2.2原始碼。
首先我們要先進入到我們剛才掛載的目錄下去。執行 $ cd /Volumes/android。
然後在按照官網步驟一步一步進行。
$
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$
chmod a+x ~/bin/repo
$
mkdir WORKING_DIRECTORY (建立原始碼儲存的檔案目錄)
$
cd WORKING_DIRECTORY/
然後就是下載原始碼了,這裡我強烈推薦下使用Android核心剖析(柯元旦著)一書提供的一段防止下載異常的指令碼。因為單獨下載可能會出現下載異常然後某個連結下載失敗的情況。
#!/bin/bash
#FileName get-android.sh
PATH=~/bin:$PATH
repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1
repo sync
while [ $? = 1 ]; do
echo "================sync failed, re-sync again ====="
sleep 3
repo sync
done
複製上面程式碼儲存到剛才的原始碼目錄(WORKING_DIRECTORY)裡。如:get-android.sh。
最後在終端執行 $ ./get-android.sh開始下載原始碼了。接下來就是漫長的等待,我也不清楚要下載多久,我都是晚上把電腦丟在那裡,設定不讓電腦休眠(休眠可能會掉網的),一直下載。當出現下圖所示很多個100%時,那恭喜你,下載完成了。
四、編譯下載的原始碼
設定編譯初始化環境
1、$ source build/envsetup.sh
2、選擇編譯目標 $lunch full-eng
開始編譯程式碼
$ make
編譯過程很漫長,也是最關鍵的部分,有很多有意思的事情會發生的。
2、如果出現 If you wish to build using higher version of SDK, build/core/combo/HOST_darwin-x86.mk:66: * try setting BUILD_MAC_SDK_EXPERIMENTAL=1 before build/core/combo/HOST_darwin-x86.mk:67: * rerunning this command 這種錯誤的話。
在終端執行export BUILD_MAC_SDK_EXPERIMENTAL=1就可以了。繼續執行$make 編譯原始碼
3、我記得在編譯了一個多小時吧的時候出現個棘手錯誤,停止編譯了,錯誤如下。
前面的都成功了,後面的有兩個失敗。很無奈啊,沒辦法,我按照提示用XCode打開了檔案發現是多了兩個右大括號},
把它去掉儲存之後,繼續$make 最後編譯成功後會出現
nstalled file list: out/target/product/generic/installed-files.txt
Target
system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Running: mkyaffs2image -f out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
最後編譯完成後執行:
emulator -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7 -sysdir ./out/target/product
/generic/ -system system.img -data userdata.img出現了模擬器了,不過這個模擬器沒有換返回鍵,home鍵。
最後附一張效果圖。