文章目錄
- 2.1 python和JDK
- 2.2 "fatal: git 1.5.4 or later required"
- 3.1 安裝依賴的軟體
- 3.2 安裝指令碼repo
- 3.3 初始化代碼倉庫
- 3.4 “fatal: git 1.5.4 or later required”的解決
- 3.5 下載代碼
- 3.6 編譯
1 概述
上個星期看到android開放原始碼的訊息,雖然覺得Google的這個動作會對業界產生很大影響,但沒有時間仔細看,只瀏覽了 Project layout。今天上午一個網友在mail中說已經編譯、運行過android。我趁著中午休息時間,在一個Ubuntu7.10的虛擬機器上編譯、運行了一下。
我在這個虛擬機器上編譯過openmoko、poky。相對於這兩個使用OpenEmbedded的平台,android的編譯要簡單一些,快一些。我在編譯openmoko和poky時,將所有下載包都儲存在一個目錄中,將編譯目錄的sources子目錄指向這個目錄。這樣做,一方面即使以後有些連結失效,也還可以編起來(其實編譯時間都不需要串連外網);另一方面在重新編譯時間,不用重新下載,可以加快編譯速度。即使這樣,完全編譯一次poky也要一個晚上。編譯android時,下載用了1個小時,編譯也只需要1個小時。
2 編譯中的兩個小問題2.1 python和JDK
Google網站對編譯過程的介紹還是很清晰的。不過在介紹其它軟體包時,都給出了apt-get命令,卻單獨給出了python和JDK的連結地址,容易對讀者產生誤導,以為要手工安裝這兩個軟體。其實這兩個軟體也應該通過apt-get安裝。特別是python,如果從原始碼安裝,可能因為依賴其它軟體,導致一些組件編譯失敗,影響android的編譯。而且python 2.6的原始碼包沒有提供make uninstall,卸載比較麻煩。其實我們只需要一個apt-get命令,就可以安裝所有依賴的軟體。
2.2 "fatal: git 1.5.4 or later required"
在Ubuntu7.10上執行repo init時,會出現"fatal: git 1.5.4 or later required"的錯誤提示。在Ubuntu8.04上編譯沒有這個問題。下面的流程裡會介紹怎樣解決這個問題。
3 在Ubuntu7.10上的編譯流程3.1 安裝依賴的軟體
執行
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl python sun-java5-jdk valgrind
3.2 安裝指令碼repo
cd ~mkdir binexport PATH=$PATH:~/bincurl http://android.git.kernel.org/repo >~/bin/repochmod a+x ~/bin/repo
將repo所在目錄加到PATH後就可以在其它目錄直接執行。
3.3 初始化代碼倉庫
我把/ui/mydroid作為工作目錄,建立目錄後在這個目錄執行:
repo init -u git://android.git.kernel.org/platform/manifest.git
如果返回"fatal: git 1.5.4 or later required",就執行3.4。否則執行3.5。
3.4 “fatal: git 1.5.4 or later required”的解決3.4.1 刪除git-core,添加apt源
首先執行
sudo apt-get remove git-core
再編輯apt的源檔案
sudo vi /etc/apt/sources.list
在最後添加
deb http://www.backports.org/debian/ etch-backports maindeb-src http://www.backports.org/debian/ etch-backports main
然後執行
sudo apt-get update
更新源。這時如果出現沒有公開金鑰的錯誤提示:“由於沒有公開金鑰,下列簽名無法進行驗證: NO_PUBKEY EA8E8B2116BA136C”,就執行3.4.2。否則執行3.4.3。
3.4.2 安裝公開金鑰
執行gpg命令下載公開金鑰:
sudo gpg --keyserver wwwkeys.pgp.net --recv-keys EA8E8B2116BA136Csudo gpg --export -a EA8E8B2116BA136C > /tmp/key
添加公開金鑰:
sudo apt-key add /tmp/key
3.4.3 更新git-core
執行:
sudo apt-get updatesudo apt-get install debian-backports-keyringsudo apt-get updatesudo apt-get -t etch-backports install git-core
然後再執行:
repo init -u git://android.git.kernel.org/platform/manifest.git
應該就可以了。
3.5 下載代碼
執行
repo sync
下載代碼。我從13:30執行這條命令,14:30完成下載。
3.6 編譯
執行
make
編譯。我從14:30開始編譯,15:40左右完成。編譯的最後輸出是:
Install system fs image: out/target/product/generic/system.imgTarget ram disk: out/target/product/generic/ramdisk.imgTarget userdata fs image: out/target/product/generic/userdata.img
4 執行
可以用模擬器運行一下剛才編譯的映像。從網上下載一個android-sdk-linux_x86-1.0_r1.zip,我將其放到~/android目錄解壓。在路徑中增加sdk的tools目錄:
export PATH=${PATH}:~/android/android-sdk-linux_x86-1.0_r1/tools
通過環境變數告訴模擬器映像所在的目錄:
export ANDROID_PRODUCT_OUT=/ui/mydroid/out/target/product/generic
最後執行:
emulator
就可以了。可以用-skin參數選擇皮膚。sdk的tools/lib/images/skins目錄中是sdk內建的皮膚。下面是兩個啟動並執行:
相對於android的java架構,我更喜歡GTK和C。但不得不承認android的UI比openmoko做得強多了。
5 結束語
可以在~/.bashrc的最後添加:
export PATH=${PATH}:~/bin:~/android/android-sdk-linux_x86-1.0_r1/toolsexport ANDROID_PRODUCT_OUT=/ui/mydroid/out/target/product/generic
自動化佈建編譯、運行環境。
這兩天晚上正在改gsmd的中文簡訊bug,沒時間仔細看android的編譯系統,感覺上應該比OpenEmbedded簡單。其實OpenEmbedded用習慣了也不錯,就是不夠精簡,速度慢一些,佔用空間大一些。編譯android的工作目錄有3.5個G。我編譯poky的目錄有10.59個G,編譯openmoko的目錄有11.6個G。