ubuntu编译android4.0
生活随笔
收集整理的這篇文章主要介紹了
ubuntu编译android4.0
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
其實(shí),android 4.0發(fā)布之后的幾天就想編譯出來(lái)體驗(yàn)一下ICS,事情多得一直拖到今天,另外一些誤導(dǎo)人的傳聞越來(lái)越兇,說(shuō)什么編譯環(huán)境最低要求memory為16G。
今天就拿實(shí)驗(yàn)室的機(jī)器跑了一通,編譯無(wú)不良反映,一切正常。
簡(jiǎn)單說(shuō)說(shuō)機(jī)器的環(huán)境:
CPU:i7 2600(8線程)
Memory:4G
System:ubuntu 10.04(64位) 復(fù)制代碼
雖然說(shuō)機(jī)器的內(nèi)存相對(duì)于CPU來(lái)說(shuō)偏低了,但是我之前編譯android 2.3時(shí),也就半個(gè)小時(shí)左右。ICS的話,估計(jì)也能完成,時(shí)間問(wèn)題而已。
至于為什么用ubuntu 10.04 (64位),因?yàn)閷W(xué)校用的是史上最變態(tài)無(wú)聊的drcom,沒(méi)找到ubuntu 11.10的64位版本,32位倒是有。還有一點(diǎn)的是ubuntu 11.10的gcc版本更新了,編譯過(guò)程中會(huì)出現(xiàn)一些errors,不過(guò)很簡(jiǎn)單就可以解決的。 Android 4.0的源代碼壓縮包可以去android.com去下載,下載后解壓縮(tar vxzf)即可,解壓之后一共有4.7G。
進(jìn)入解壓之后的目錄,ls一下就可以看到Makefile了。指向 build/core/main.mk 復(fù)制代碼
編譯之前要安裝一些依賴包什么的,還有JDK之類的東西。 因?yàn)橹熬幾g過(guò)android的源代碼,機(jī)器已經(jīng)安裝了,而且是64bit的系統(tǒng),所以在terminal轉(zhuǎn)到源代碼目錄下,直接make即可,要修改編譯中分配的線程的話,make –jN即可,N為線程數(shù)。e.g : make –j6 復(fù)制代碼
-------------------------------------------------------------------- 編譯準(zhǔn)備工作------------------------------------------------------------------
附上需要安裝的依賴: $ sudo apt-get update
$ sudo apt-get -y install git-core?
$ sudo apt-get -y install gnupg?
$ sudo apt-get -y install sun-java6-jdk flex
$ sudo apt-get -y install bison?
$ sudo apt-get -y install gperf?
$ sudo apt-get -y install libsdl-dev?
$ sudo apt-get -y install libesd0-dev?
$ sudo apt-get -y install libwxgtk2.6-dev?
$ sudo apt-get -y install build-essential?
$ sudo apt-get -y install zip?
$ sudo apt-get -y install curl?
$ sudo apt-get -y install libncurses5-dev?
$ sudo apt-get -y install zlib1g-dev?
$ sudo apt-get -y install valgrind 復(fù)制代碼
(如果是32bit的系統(tǒng)的話,則要更改幾個(gè)Android.mk文件) /external/clearsilver/cgi/Android.mk?
/external/clearsilver/java-jni/Android.mk?
/external/clearsilver/util/Android.mk?
/external/clearsilver/cs/Android.mk 復(fù)制代碼
用gedit打開(kāi),修改m64為m32即可
另外
build/core/main.mk 復(fù)制代碼
也要把
ifneq (64,$(findstring 64,$(build_arch))) 復(fù)制代碼
修改為
ifneq (i686,$(findstring i686,$(build_arch))) 復(fù)制代碼
-------------------------------------------------------------------- 編譯過(guò)程------------------------------------------------------------------
在terminal中
$make?
復(fù)制代碼
編譯開(kāi)始……
可以看到platform version為4.0.1,然后開(kāi)始漫長(zhǎng)的等待。
如果是32bit的系統(tǒng),就可能會(huì)出現(xiàn)一下兩個(gè)問(wèn)題
error 1、
make: ***
[out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error??1 復(fù)制代碼
在terminal中輸入
$ gedit frameworks/base/libs/utils/Android.mk 復(fù)制代碼
將下面這一行
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) 復(fù)制代碼
改為
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive 復(fù)制代碼
error 2、
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]? ?error 1 復(fù)制代碼
此處編譯錯(cuò)誤是由于ubuntu 11.10采用了GCC4.6.1導(dǎo)致的。 解決方法: 修改源碼目錄下 /build/core/combo/HOST_linux-x86.mk 復(fù)制代碼
將以下語(yǔ)句 HOST_GLOBAL_CFLAGS
+= -D_FORTIFY_SOURCE=0 復(fù)制代碼
修改為 HOST_GLOBAL_CFLAGS
+= -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 復(fù)制代碼
打開(kāi)system monitor查看一下系統(tǒng)的資源利用情況,前二十分鐘,cpu各個(gè)線程幾乎都是滿載工作,memory一般維持在1.5G左右。
然后三十分鐘過(guò)后,memory開(kāi)始直線上升了,主要是在執(zhí)行一些copying和install之類的工作,CPU的線程就一般不超過(guò)10%了。期間電腦卡爆,memory滿載一直持續(xù)到編譯工作的完成。
編譯過(guò)程大概花了兩個(gè)小時(shí),如果機(jī)器的memory上到8G的話,估計(jì)時(shí)間也就40分鐘左右。但是一些人說(shuō)的最低要求16G內(nèi)存是很坑人的,都沒(méi)有試過(guò),然后就以訛傳訛了。
我的電腦為AMD X4 640 內(nèi)存為4G的32位ubuntu11.10編譯android 2.3也就一個(gè)小時(shí)。加到8G內(nèi)存的話,編譯android 4.0估計(jì)也沒(méi)壓力。(CPU超頻到3.52GHZ,cool and quiet關(guān)閉) 編譯成功會(huì)會(huì)再源碼目錄下生成一個(gè)out文件夾,大小有12G,所有所在的掛載區(qū)剩余空間最好大于20G。
相應(yīng)的img在 out/target/product/generic 復(fù)制代碼
里面,一共有三個(gè)img,ramdisk.img 、system.img、 user.img
其中ramdisk.img是一個(gè)分區(qū)映像文件,kernel啟動(dòng)時(shí),ramdisk負(fù)責(zé)init,system.img包括了主要系統(tǒng),系統(tǒng)app等,掛載于/system, userdata.img包括了一些用戶數(shù)據(jù),被掛載到/data下,diy過(guò)固件的童鞋應(yīng)該是很清楚這一點(diǎn)的。
另外還有root、system、data三個(gè)文件夾,其實(shí)就是上述三個(gè)img解壓之后的內(nèi)容而已.root對(duì)應(yīng)ramdisk.img.。 可以進(jìn)去system目錄下查看一下安裝過(guò)的app
然后再順便把a(bǔ)ndroid 4.0的SDK編譯出來(lái),因?yàn)閙ake編譯并不包含kernel和SDK。 在源碼目錄執(zhí)行 $make PRODUCT-sdk-sdk 復(fù)制代碼
即可。
SDK編譯的話,時(shí)間就短了很多,也就不到30分鐘吧。
編譯之后可以在out/host/linux-x86/sdk發(fā)現(xiàn)編譯出來(lái)的android 4.0 SDK包,跳到tools,可以看到一些android工具之類的,其中emulator是用來(lái)加載啟動(dòng)編譯好的以上3個(gè)img文件。
好吧,來(lái)看看android 4.0的面目。
配置一下export
$sudo gedit?
/etc/bash.bash.rc 復(fù)制代碼
在后面增加
export ANDROID_SDK_HOME=/usr/android4.0/android4.0/out/host/linux-x86/sdk/android-sdk_eng.xumin_linux-x86
export PATH=$ANDROID_SDK_HOME/tools:$PATH?
export ANDROID_PRODUCT_OUT=/usr/android4.0/android4.0/out/target/product/generic 復(fù)制代碼
保存退出,然后再開(kāi)一個(gè)shell,輸入 $emulator 復(fù)制代碼
就可以看到android 4.0的虛擬機(jī)了。
額,分辨率貌似有點(diǎn)低,好吧,在eclipse下面引入剛剛編譯好的SDK,配置一個(gè)android 4.0的AVC,來(lái)點(diǎn)有平板味道的android虛擬機(jī)。 先安裝ADT插件
http://dl-ssl.google.com/android/eclipse/ 復(fù)制代碼
Android 4.0的UI看起來(lái)很清爽,沒(méi)有2.3那種沉悶感,解鎖是全新方式,主菜單里面分了兩個(gè)類別,圖標(biāo)很多都是全新的面孔。 一個(gè)是APP,另外一個(gè)是WIDGETS,小控件之類的東西,可拖動(dòng)。
看一下系統(tǒng)信息,可發(fā)現(xiàn)kernel版本是2.6.29的,可以下載新的內(nèi)核3.0.1重新編譯。
--------------------------------------------------------------------------亂談分割線-------------------------------------------------------------------------
Android 4.0是在Android3.X基礎(chǔ)上升級(jí)的,有了真正的平板上面的android系統(tǒng),并不像以前的android 2.3那樣,拿一個(gè)手機(jī)的系統(tǒng)整到平板上面去跑,很多東西看著都別扭。 現(xiàn)在傳出來(lái)的消息是RK2918運(yùn)行ICS,基本程序和應(yīng)用問(wèn)題不大,但是3D應(yīng)用會(huì)稍微吃力,依賴于android4.0的代碼優(yōu)化好,沒(méi)有太大問(wèn)題,然后國(guó)內(nèi)的幾個(gè)廠家都想先撥頭籌,現(xiàn)在距離android 4.0發(fā)布也就兩周,拿到源代碼的時(shí)間較短,新系統(tǒng)的移植出現(xiàn)的各種新bug,flash支持什么的,加上android 2.3殘留下來(lái)的老毛病,也有得折騰的。希望廠家淡定點(diǎn),不要急著量產(chǎn)android 4.0,先完善產(chǎn)品。Rk29上android 4.0還是感覺(jué)是為了RK30作為測(cè)試而已,也順手榨干RK29的剩余價(jià)值,真正主力還是在RK30雙核。
----------------------------------------------------------------------------------------------------------?
另外提一下:
關(guān)于android 4.0與內(nèi)核的關(guān)系
有些玩家誤以為2.6.X的內(nèi)核不是真正的android 4.0
? ?? ?個(gè)人有點(diǎn)不大同意,首先一點(diǎn),內(nèi)核的更新一般都是更新了一些android平臺(tái)的設(shè)備驅(qū)動(dòng)和修正bug之類的。事實(shí)上,更新并不是非常大,更加不存在真假android 4.0的說(shuō)法。 還有網(wǎng)上的一篇文章的一句話,引用一下
樊建鵬:系統(tǒng)版本的升級(jí)從Android2.3升到Android4.0,需要內(nèi)核版本的同步升級(jí)支持,內(nèi)核要為3.0.8版才行,如果是2.6.X則無(wú)法實(shí)現(xiàn)好的兼容性。
這位工程師的意思是說(shuō)Rk29平臺(tái)的android 4.0最好是更新到3.0的kernel,要不就會(huì)有一些兼容性的問(wèn)題,其實(shí)也就是一些驅(qū)動(dòng)、bug什么的,也沒(méi)什么大不了的。而其他方案是否更新到新版本的內(nèi)核,還得看方案,不過(guò)升級(jí)了,還是多了一個(gè)可宣傳的噱頭。 另外關(guān)于之前說(shuō)的android被linux kernel踢出一事,除了更新kernel麻煩一點(diǎn)點(diǎn),編譯一個(gè)新的kernel是非常簡(jiǎn)單的事情而已,3.0.X的kernel隨便上,另外官方下載的源代碼編譯出來(lái)的初始kernel版本也2.6.29,難道官方放出來(lái)的android 4.0就不是真正的ICS了?
完畢
雖然說(shuō)機(jī)器的內(nèi)存相對(duì)于CPU來(lái)說(shuō)偏低了,但是我之前編譯android 2.3時(shí),也就半個(gè)小時(shí)左右。ICS的話,估計(jì)也能完成,時(shí)間問(wèn)題而已。
至于為什么用ubuntu 10.04 (64位),因?yàn)閷W(xué)校用的是史上最變態(tài)無(wú)聊的drcom,沒(méi)找到ubuntu 11.10的64位版本,32位倒是有。還有一點(diǎn)的是ubuntu 11.10的gcc版本更新了,編譯過(guò)程中會(huì)出現(xiàn)一些errors,不過(guò)很簡(jiǎn)單就可以解決的。 Android 4.0的源代碼壓縮包可以去android.com去下載,下載后解壓縮(tar vxzf)即可,解壓之后一共有4.7G。
進(jìn)入解壓之后的目錄,ls一下就可以看到Makefile了。指向
編譯之前要安裝一些依賴包什么的,還有JDK之類的東西。 因?yàn)橹熬幾g過(guò)android的源代碼,機(jī)器已經(jīng)安裝了,而且是64bit的系統(tǒng),所以在terminal轉(zhuǎn)到源代碼目錄下,直接make即可,要修改編譯中分配的線程的話,make –jN即可,N為線程數(shù)。e.g :
-------------------------------------------------------------------- 編譯準(zhǔn)備工作------------------------------------------------------------------
附上需要安裝的依賴:
(如果是32bit的系統(tǒng)的話,則要更改幾個(gè)Android.mk文件)
用gedit打開(kāi),修改m64為m32即可
另外
也要把
修改為
-------------------------------------------------------------------- 編譯過(guò)程------------------------------------------------------------------
在terminal中
可以看到platform version為4.0.1,然后開(kāi)始漫長(zhǎng)的等待。
如果是32bit的系統(tǒng),就可能會(huì)出現(xiàn)一下兩個(gè)問(wèn)題
error 1、
在terminal中輸入
將下面這一行
此處編譯錯(cuò)誤是由于ubuntu 11.10采用了GCC4.6.1導(dǎo)致的。 解決方法: 修改源碼目錄下
將以下語(yǔ)句
修改為
打開(kāi)system monitor查看一下系統(tǒng)的資源利用情況,前二十分鐘,cpu各個(gè)線程幾乎都是滿載工作,memory一般維持在1.5G左右。
然后三十分鐘過(guò)后,memory開(kāi)始直線上升了,主要是在執(zhí)行一些copying和install之類的工作,CPU的線程就一般不超過(guò)10%了。期間電腦卡爆,memory滿載一直持續(xù)到編譯工作的完成。
編譯過(guò)程大概花了兩個(gè)小時(shí),如果機(jī)器的memory上到8G的話,估計(jì)時(shí)間也就40分鐘左右。但是一些人說(shuō)的最低要求16G內(nèi)存是很坑人的,都沒(méi)有試過(guò),然后就以訛傳訛了。
我的電腦為AMD X4 640 內(nèi)存為4G的32位ubuntu11.10編譯android 2.3也就一個(gè)小時(shí)。加到8G內(nèi)存的話,編譯android 4.0估計(jì)也沒(méi)壓力。(CPU超頻到3.52GHZ,cool and quiet關(guān)閉) 編譯成功會(huì)會(huì)再源碼目錄下生成一個(gè)out文件夾,大小有12G,所有所在的掛載區(qū)剩余空間最好大于20G。
相應(yīng)的img在
其中ramdisk.img是一個(gè)分區(qū)映像文件,kernel啟動(dòng)時(shí),ramdisk負(fù)責(zé)init,system.img包括了主要系統(tǒng),系統(tǒng)app等,掛載于/system, userdata.img包括了一些用戶數(shù)據(jù),被掛載到/data下,diy過(guò)固件的童鞋應(yīng)該是很清楚這一點(diǎn)的。
另外還有root、system、data三個(gè)文件夾,其實(shí)就是上述三個(gè)img解壓之后的內(nèi)容而已.root對(duì)應(yīng)ramdisk.img.。 可以進(jìn)去system目錄下查看一下安裝過(guò)的app
然后再順便把a(bǔ)ndroid 4.0的SDK編譯出來(lái),因?yàn)閙ake編譯并不包含kernel和SDK。 在源碼目錄執(zhí)行
編譯之后可以在out/host/linux-x86/sdk發(fā)現(xiàn)編譯出來(lái)的android 4.0 SDK包,跳到tools,可以看到一些android工具之類的,其中emulator是用來(lái)加載啟動(dòng)編譯好的以上3個(gè)img文件。
好吧,來(lái)看看android 4.0的面目。
配置一下export
在后面增加
保存退出,然后再開(kāi)一個(gè)shell,輸入
就可以看到android 4.0的虛擬機(jī)了。
額,分辨率貌似有點(diǎn)低,好吧,在eclipse下面引入剛剛編譯好的SDK,配置一個(gè)android 4.0的AVC,來(lái)點(diǎn)有平板味道的android虛擬機(jī)。 先安裝ADT插件
Android 4.0的UI看起來(lái)很清爽,沒(méi)有2.3那種沉悶感,解鎖是全新方式,主菜單里面分了兩個(gè)類別,圖標(biāo)很多都是全新的面孔。 一個(gè)是APP,另外一個(gè)是WIDGETS,小控件之類的東西,可拖動(dòng)。
看一下系統(tǒng)信息,可發(fā)現(xiàn)kernel版本是2.6.29的,可以下載新的內(nèi)核3.0.1重新編譯。
--------------------------------------------------------------------------亂談分割線-------------------------------------------------------------------------
Android 4.0是在Android3.X基礎(chǔ)上升級(jí)的,有了真正的平板上面的android系統(tǒng),并不像以前的android 2.3那樣,拿一個(gè)手機(jī)的系統(tǒng)整到平板上面去跑,很多東西看著都別扭。 現(xiàn)在傳出來(lái)的消息是RK2918運(yùn)行ICS,基本程序和應(yīng)用問(wèn)題不大,但是3D應(yīng)用會(huì)稍微吃力,依賴于android4.0的代碼優(yōu)化好,沒(méi)有太大問(wèn)題,然后國(guó)內(nèi)的幾個(gè)廠家都想先撥頭籌,現(xiàn)在距離android 4.0發(fā)布也就兩周,拿到源代碼的時(shí)間較短,新系統(tǒng)的移植出現(xiàn)的各種新bug,flash支持什么的,加上android 2.3殘留下來(lái)的老毛病,也有得折騰的。希望廠家淡定點(diǎn),不要急著量產(chǎn)android 4.0,先完善產(chǎn)品。Rk29上android 4.0還是感覺(jué)是為了RK30作為測(cè)試而已,也順手榨干RK29的剩余價(jià)值,真正主力還是在RK30雙核。
----------------------------------------------------------------------------------------------------------?
另外提一下:
關(guān)于android 4.0與內(nèi)核的關(guān)系
有些玩家誤以為2.6.X的內(nèi)核不是真正的android 4.0
? ?? ?個(gè)人有點(diǎn)不大同意,首先一點(diǎn),內(nèi)核的更新一般都是更新了一些android平臺(tái)的設(shè)備驅(qū)動(dòng)和修正bug之類的。事實(shí)上,更新并不是非常大,更加不存在真假android 4.0的說(shuō)法。 還有網(wǎng)上的一篇文章的一句話,引用一下
樊建鵬:系統(tǒng)版本的升級(jí)從Android2.3升到Android4.0,需要內(nèi)核版本的同步升級(jí)支持,內(nèi)核要為3.0.8版才行,如果是2.6.X則無(wú)法實(shí)現(xiàn)好的兼容性。
這位工程師的意思是說(shuō)Rk29平臺(tái)的android 4.0最好是更新到3.0的kernel,要不就會(huì)有一些兼容性的問(wèn)題,其實(shí)也就是一些驅(qū)動(dòng)、bug什么的,也沒(méi)什么大不了的。而其他方案是否更新到新版本的內(nèi)核,還得看方案,不過(guò)升級(jí)了,還是多了一個(gè)可宣傳的噱頭。 另外關(guān)于之前說(shuō)的android被linux kernel踢出一事,除了更新kernel麻煩一點(diǎn)點(diǎn),編譯一個(gè)新的kernel是非常簡(jiǎn)單的事情而已,3.0.X的kernel隨便上,另外官方下載的源代碼編譯出來(lái)的初始kernel版本也2.6.29,難道官方放出來(lái)的android 4.0就不是真正的ICS了?
完畢
總結(jié)
以上是生活随笔為你收集整理的ubuntu编译android4.0的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ubuntu10.04 android
- 下一篇: Ubuntu下添加开机启动脚本