參考:
http://source.android.com/source/initializing.html
編譯Android源碼的時候make有幾十次了吧,一度還中斷了幾天不想再去調錯誤,當時覺得各種莫名其妙的錯誤,但是當編譯通過之後,發現其實也沒那麼麻煩,關鍵要把一些環境和庫配置好。
下面整理下編譯Android2.3.3源碼的整個流程,等我下次重新編譯一次再附圖。
操作系統:Ubuntu12.04 64位
一、開發環境
1.安裝java並配置環境
我裝的版本是java1.6.0,在官網上下載
2.安裝一堆工具
sudo apt-get install git-core gnupg flex bison gperf zip curl libc6-dev lib32ncurse5-dev ia32-libs xllproto-core-dev libx11-dev g++-multilib mingw32 tofrodos python-markdown libxm12-utils valgrind \\ build-essential zlib1g-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev \\
這麼多全裝上吧,雖然不知道是不是都有用到。最煩的就是提示No such file or directory。
注:\\……\\中的軟件屬於有可能出問題的,包括名字輸入不對(l1沒分清楚),版本不對,或者版本不適用,根據提示修改就行。要特別注意的是build-essential,這個在我安裝的時候默認裝的是gcc4.7.2,可能Android2.3.3不能用這個版本編譯,後來我改裝4.4.3了,詳見http://hi.baidu.com/designhouse/item/87c3568d091752c8b17154c3
二、下載源碼
wget https://dl-太長不想打/repo
chmod a+x repo
sudp mv repo /bin/
創建一個目錄用來放android源碼,任意
mkdir xxx
cd xxx
進入自己建的文件夾準備下載
repo init -u https://android.太長/manifest -b android-2.3.3_r1
注:這裏就要指定你要下的版本,不然默認就下最新版,版本好的名字可以網上查,或者等敲完命令會列出來
repo sync
開始下載,注:輸入用戶名,郵箱,支持斷點續傳,只要不改帳號。
文件大小大概是3.1G,一般下載幾個小時。
三、編譯源碼
在下載的時間裏可以做很多事,比如配置下環境,
官網上的配置:http://source.android.com/source/building.html,雖然不知道有沒有用,不過還是照做了。
事實證明配置環境是非常重要滴,不然編譯的時候會很痛苦,以下是我的/etc/profile文件,供大家參考一下
2 #JAVA
33 export JAVA_HOME=/home/administrator/develop/jdk1.6.0_38
34 export JRE_HOME=/home/administrator/develop/jdk1.6.0_38/jre
35 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
36 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
37
38 #ANDROID
39 export ANDROID_SDK_HOME=/home/administrator/develop/Android/adt-bundle-linux-x86_64/sdk
40 export PATH=$ANDROID_SDK_HOME/tools:$PATH
41
42 #NDK
43 export NDK_HOME=/home/administrator/develop/Android/android-ndk-r8d
44 export PATH=$NDK_HOME:$PATH
45
46 #C_INCLUDE
47 C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/administrator/develop/Android/android-source/frameworks/base/include:/home/administrator/develop/Android/android-source/system/core/include:/usr/include
48 export C_INCLUDE_PATH
49
50 #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc081/lib:/usr/local/gmp432/lib:/usr/local/mpfr242/lib
51 #export LD_RUN_PATH=LD_LIBRARY_PATH
52
其中有安裝其他軟件時配的,具體忘了哪些是編譯android源碼必要的。
下載完源碼之後運行make -j4,編譯完後提示:
……/system.img
……/installed-files.txt
可能出現的錯誤:
error.GitError: manifest rev-list(……):…
原因:源碼文件夾有其他版本源碼
解決:刪除.repo中除repo文件夾的其他所有文件
error:'indexofkey' was not declared in this scope
原因:似乎是編譯版本不對
解決:後來改用版本gcc4.4.3(4.4.7也可以)
fatal error: asm/byteorder.h no such file or directory
原因:編譯的好幾分鐘後纔出來的錯誤...原來只是鏈接文件出錯
解決:ln -s /usr/include/x86_64-linux-gnu/asm /usr/include