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