1. 程式人生 > >Mac OS X 10.8.4下Android4.2.2原始碼下載與編譯

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目錄下。我們需要其將掛載到某個目錄下面,在終端進入建立的磁碟映象檔案目錄,輸入

hdiutil attach ~/android.dmg  -mountpoint /Volumes/android。這樣就將其掛載到Volumes目錄下。至此,基本環境完成。

三、下載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鍵。

最後附一張效果圖。