1. 前言
本文敘述了如何從零開始搭建基于Google官方Android 2.2.1(froyo)源碼的開發(fā)環(huán)境,包括如何下載源代碼、編譯源代碼,以及在模擬器中運行編譯生成的鏡像。文中開發(fā)機是基于Ubuntu 10.04的,同樣適用于其他版本的Ubuntu。現(xiàn)在需要弄清楚一下幾點,防止后面出現(xiàn)誤操作: 下載源代碼是用參數(shù):repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo (下載的是2.2.1版本,編譯環(huán)境操作系統(tǒng)必須是32位的,jdk1.5版本的---jdk1.5沒有64位版本)。如果是沒有帶參數(shù)的下載源代碼,將會下載所有的源代碼,編譯環(huán)境要求:操作系統(tǒng)64位,jdk1.6,(偶是2010年10月15日做)但很有可能會出現(xiàn)交叉編譯工具錯誤:“ /bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc: 沒有那個文件或目錄 ”(實際上是有arm-eabi-gcc這個文件的,偶懷疑是版本問題--32位的,而環(huán)境要求是64位的—-- 下載全部代碼)
2. 下載JDK 1.5 (不建議此下載方式,防止配置環(huán)境參數(shù)出錯。建議用apt-get install方式,請?zhí)D到:第4步)
編譯Android源碼需要JDK1.5版(主要是需要其中的javadoc),1.6版是 不兼容的。JDK1.5已經停止支持,其最 終的版本是JDK 5.0 Update 22。
可從Sun官網上下載:
http://java.sun.com/javase/downloads/5u22/jdk
3. 部署JDK 1.5
3.1 解壓縮JDK
以下命令均在root賬戶上執(zhí)行,非root賬戶執(zhí)行某些命令可能需要加sudo。
將jdk-1_5_0_22-linux-i586.bin放在root目 錄下。進入該目錄:
cd ~
然后賦予該bin文件可執(zhí)行屬性:
chmod +x jdk-1_5_0_22-linux-i586.bin
再執(zhí)行安裝(注意前面有./):
./jdk-1_5_0_22-linux-i586.bin
跳過協(xié)議閱讀。
最后一行:
Do you agree to the above license terms? [yes or no]
鍵入yes,然后回車,開始解壓。默認會解壓到當前目錄下的jdk1.5.0_22目錄下(此處是~/ jdk1.5.0_22)。
3.2 JDK版本切換
如果同時需要使用JDK1.6版做應用開發(fā),則系統(tǒng)中將同時存在JDK1.5和JDK1.6。 因此需要實現(xiàn)能夠在不同版本間切換。如果不使用JDK1.6,請做完1.5版 的設置后跳至3.3節(jié)。
這里使用update-alternatives命令實現(xiàn)。
首先為JDK1.5版生成可選配置選項:
update-alternatives --install /usr/bin/jdk jdk /root/jdk1.5.22 255
(sudo update-alternatives --install /usr/bin/jdk jdk /home/ynb/jdk1.5.0_22 255)
/usr/bin/jdk是符號鏈接,它指 向/etc/alternatives/jdk(由第2個參數(shù) 給出的),/root/jdk1.5.22(/home/ynb/jdk1.5.0_22)是 實際目的鏈接,255是優(yōu)先級(任意整數(shù), 在automatic mode自動模式 時,數(shù)字大的優(yōu)先級較高,被選為默認配置選項)。
然后再為JDK1.6版生成(如果有JDK1.6的話。不使用JDK1.6的請?zhí)?/span>3.3節(jié)):
update-alternatives --install /usr/bin/jdk jdk /root/jdk1.6.20 0
這樣,默認jdk版本即為1.5版。 需要切換到1.6版時,請使用update-alternatives –config jdk
3.3 配置JDK環(huán)境變量
下面開始配置環(huán)境變量。
在終端中執(zhí)行:sudo gedit ~/.bashrc
修改.bashrc文件,添加下面語句:
#set java environment
export JAVA_HOME=/usr/bin/jdk
export JRE_HOME=JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
該段代碼最好設置在文件的尾部。
保存文件。在終端中執(zhí)行source ~/.bashrc
重啟系統(tǒng)請使用java –version檢查JDK是否 配置正確。
4.用apt-get install方式安裝JDK1.5:
Android 要求的 jdk 1.5,而Ubuntu10.4的源里只有JDK1.6. 如果安裝了jdk1.6請先卸載:
$sudo apt-get remove remove openjdk-6-jdk
$sudo apt-get remove remove openjdk-6-jre
$sudo apt-get remove remove openjdk-6-jre-headless
安裝jdk1.5目前網上解決方法有兩種:
解決方法一(建議): 安裝JDK1.5
1) 根據官方文檔里所說,源代碼的編譯必須使用JDK5才能編譯的了,所以這里偶使用jdk5
2) 需要先更新源,在終端里執(zhí)行 sudo vim /etc/apt/sources.list
3) 在source.list里把以下2行拷貝到文檔最后面:
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
保存退出。
4) 執(zhí)行 sudo apt-get update 更新源.
5) 配置編譯環(huán)境并下載JDK5:sudo apt-get install sun-java5-jdk
解決方法二: 安裝JDK 1.6 , 修改Android源文件。
1) 安裝jdk 1.6,修改<src_top/build/core/make.mk>(如果2.0版本源碼請修改<src_top/build/core/main.mk>)
在文件中搜索并分別把:
java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1.5[. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1.5[. "$$]')
兩行改成:
java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1.6[. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1.6[. "$$]')
即可。
推薦使用第一種解決方法。
5. 安裝其他必備組件
在終端上,使用下面的命令安裝:(前面的1、2、3步驟都可以省略啦)
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
6.1 安裝repo腳本
首先安裝repo。在當前用戶:~目 錄下新建一個bin目錄。在終端中執(zhí)行:
cd ~
mkdir bin
然后,向PATH中添加bin路 徑:
export PATH=$PATH:~/bin
然后執(zhí)行下面兩行指令,下載repo腳本并修改可執(zhí)行屬性:
curl https://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo
6.2 初始化repo
首先建立一個目錄用來存放Android源代碼:
mkdir mydroid
cd mydroid
然后用最新的列表執(zhí)行初始化。這里偶下載android 2.2.1(froyo),因此加了參數(shù) –b froyo:(android 2.2.2(froyo)源碼下載:2G多
repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo )
(下載2.1_r2源碼
repo init -u git://android.git.kernel.org/platform/manifest.git –b android-2.1_r2
下載全部源碼:repo init -u git://android.git.kernel.org/platform/manifest.git)
(下載2.0源碼:
repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair )
(上面下載2.0時有個莫名其妙的問題:
ynb@ynb-pc:~/bin$ repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair
Usage: repo init -u url [options]
出現(xiàn)上面問題,刪除mydroid目錄:rmdir mydroid ; mkdir mydroid2.0 ; cd mydroid2.0;
再:repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair 就可以了)
(如果能通過瀏覽器瀏覽到android源碼的主頁,但運行repo init或repo sync的時候,卻沒法下載源碼,形如:
只需要把git開頭的地址改為http即可:
[1]
repo init -u http://android.git.kernel.org/platform/manifest.git -b froyo
[2]修改manifest.git里的地址,也是把git://改為http://
vim .repo/manifest.git
如:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="korg"
fetch="http://android.git.kernel.org/"
review="review.source.android.com" />
<default revision="froyo"
remote="korg" /> )
這中間會問到你的名字和Email。如果你打算上傳代碼,Email須是一個Google賬戶。
repo初始化成功后會看到類似于下面的提 示:
repo initialized in /home/(當前用戶名)/mydroid
最后執(zhí)行$repo sync開始同步代碼。過程比較漫長,下載速度取決于你的網速(偶的3-4小時左右),中間有可能遇到斷線,重新執(zhí)行repo sync即可斷點續(xù)傳。
7. 編譯Android源代碼
7.1 編譯生成鏡像
切換到android源碼根目錄下,執(zhí)行$sudo make即可。首次編譯非常耗時,取決于機器配置,大約需要2-3小時。有可能會出現(xiàn):“Permission denied (權限拒絕的提示)” 請命令賦予權限:$cd 無權限文件的當前目錄 回車; $sudo chmod -R +rwx * 回車; 完成后鏡像生成在/root/mydroid/out/target/product/generic下:android源碼編譯后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系統(tǒng),system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數(shù)據,emulator加載這3個映像文件后,會把 system和 userdata分別加載到 ramdisk文件系統(tǒng)中的system和 userdata目錄下。
7.2 編譯、配置Android SDK
make編譯完成后,執(zhí)行$sudo make sdk命令,生成對應于該版本源代碼的sdk,此過程用的時間偶的是10多分鐘。注意這個sdk不能用于生產環(huán)境。
用于生產環(huán)境的最好用如下命令: $sudo make PRODUCT-sdk-sdk命令,生成對應于該版本源代碼的用于生產環(huán)境的sdk,此過程用的時間偶的是1個多小時。
Android官方的SDK和偶自己編譯Android源碼時使用make sdk編譯出的SDK有區(qū)別,模擬器版本不同,加載的默認鏡像也不同(一個是官方的, 一個是自己編譯的)。下面將展示如何能夠自由切換SDK版本。
首先是自己編譯的SDK版本,實際位置是/root/mydroid/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86。
因為它比較常用,我們給它高優(yōu)先級:
update-alternatives --install /usr/bin/AndroidSDK AndroidSDK /root/mydroid/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86 255
事先下載的官方SDK位置是/root/android-sdk-linux_86,執(zhí)行:
update-alternatives --install /usr/bin/AndroidSDK AndroidSDK /root/android-sdk-linux_86 0
8. 在模擬器中運行編譯的鏡像
打開終端,執(zhí)行android腳本:
$android
選擇左邊第一項Virtual Devices,然后在右邊選擇New,新建一個AVD。
Name:AVD的名稱,隨便取,但只能包含字母和數(shù)字以及點、下劃線和連字符, 這里取名test。
Traget:目標SDK版本,這里選自己編譯的2.1-r1版Android SDK。
SD Card:SD卡。暫且不填,待需要時再設置。
Skin:皮膚(模擬器屏幕分辨率)。
Hardware:使用默認即可
若以后要再次啟動此AVD,請在終端中運行:
emulator –avd test 或 者emulator @test
聯(lián)系客服