說(shuō)一下Android源碼的編譯,這個(gè)困擾了我粉久的問題,在網(wǎng)上隨便搜一下Android源碼編譯,都能搜出很多結(jié)果,但在這里我得告訴你,別太 樂觀,沒有一個(gè)網(wǎng)頁(yè)能讓你順順利利的按照步驟,編譯出最后的img的。我在這里盡量把我所遇到的問題、及解決辦法告訴大家,我自認(rèn)編譯Android所能 遇到的問題,我都遇到了,所以應(yīng)該是一個(gè)比較全的編譯指南,有不對(duì)的地方歡迎指教。 首先說(shuō)一下,編譯Android所用的系統(tǒng),目前ubuntu是比較好的平臺(tái),也是官方推薦的,但具體版本,說(shuō)的都比較少,為了避免大家走彎路,我 這里說(shuō)一下,最好的就是ubuntu 8.10,他所帶有的各個(gè)編譯器都是最合適的,Android編譯對(duì)編譯器的要求近乎于苛刻。網(wǎng)上總說(shuō)以8.04作為編譯的系統(tǒng),但我在這里說(shuō),8.04 絕不是什么最好的系統(tǒng)。下面我會(huì)一一說(shuō)明。 Android編譯主要包括對(duì)C,C++,的編譯,這里主要是GCC,G++,編譯器,針對(duì)ARM平臺(tái)的編譯器,主要是arm-eabi-編譯器, 還有針對(duì)JAVA的編譯器,就是JDK,對(duì)GCC,G++最好的版本是4.3版,ubuntu 8.04的gcc版本是4.2.4,并且通過apt-get install沒有g(shù)cc4.3的包,這里郁悶了我很久,最后通過下載8.10的包才完成的GCC升級(jí),順帶說(shuō)一下,ubuntu apt-get工具的源添加方法,在/etc/apt/sourcelist里面是源的地址,在這里加入8.10版本的升級(jí)源,就可以通過apt安裝下載 8.10的應(yīng)用程序了,但由于在8.04下升級(jí)不能達(dá)到GCC4.3,正常情況下,對(duì)不同版本的系統(tǒng)軟件升級(jí)是不能使用別的版本的軟件的,所以這樣做不知 道有什么不好的結(jié)果,所以選擇操作系統(tǒng)最好是8.10,如果是9以后的版本就需要降級(jí),就是安裝低版本的程序,通過在/usr/bin下修改軟鏈接、或者 apt-alternatives --config 來(lái)選擇,對(duì)GCC的鏈接,通過ln -sf gcc-4.3 gcc,修改,對(duì)JDK需要通過apt-alternatives --config java,apt-alternatives --config javac,apt-alternatives --config javah,進(jìn)行修改,選擇JDK1.5版本。 首先下載Android的源代碼,Android的源代碼管理工具是使用git,配合repo來(lái)實(shí)現(xiàn)的,安裝git,curl http://android.git./repo > /home/android /bin/repo,通過repo init -u選擇Android代碼進(jìn)行下載,這里在下載時(shí),最好使用-b選擇下載的版本,主要因?yàn)槟J(rèn)下載的是master branch就是正在編寫、升級(jí)的版本,說(shuō)白了屬于測(cè)試版,對(duì)編譯Android來(lái)說(shuō),沒什么好處,最好通過-b指定穩(wěn)定版本進(jìn)行下載,-b后面可以是 cupcake/eclair等等,這里需要耐心等待,一般下載5,6個(gè)鐘頭就能下載完畢,以我的經(jīng)歷,一般是早上6點(diǎn)鐘到上午10點(diǎn)左右速度都很好的, 其他時(shí)間速度不行。網(wǎng)絡(luò)經(jīng)常斷,通過XXXX修改。 接著是編譯環(huán)境的配置,編譯Android需要安裝很多軟件,apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev,這些是官方說(shuō)明中需要的,可能還有fakeroot,apt-get install valgrind ,反正這里一定要確保完全安裝這些工具,否則編譯會(huì)出很多莫名其妙的問題。 接著就可以make了,首先檢查一下gcc,jdk版本是不是gcc-4.3,JDK1.5版本,接著修正環(huán) 境變量,export JAVA_HOME=/yourJDKpath/,ANDROID_JAVA_HOME=$JAVA_HOME,將這兩句加入/etc /environment中,重啟機(jī)器,將環(huán)境變量啟用。 [android]編譯時(shí)出現(xiàn) /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory 錯(cuò)誤信息 缺少libc開發(fā)包,安裝即可: apt-get install libc6-dev-i386 [android]編譯時(shí)出現(xiàn)/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searching for -lz錯(cuò)誤信息 缺少lib32z1-dev,安裝即可:apt-get install lib32z1-dev 引自:http://0123.blog.163.com/blog/static/4788312010102392452933/ host Executable: acp (out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp) 解決: sudo apt-get install g++-multilib GL/glx.h: No such file or directory) sudo apt-get install libgl1-mesa-dev 接著就可以make了,這里著重說(shuō)一下編譯可能遇到的錯(cuò)誤,如果你遇到的錯(cuò)誤在網(wǎng)上找不到,那么有可能是在repo解壓過程中對(duì)文件產(chǎn)生的錯(cuò)誤,將Android src目錄下除.repo目錄外,都刪除,重新執(zhí)行repo sync解壓之后再make。其它的錯(cuò)誤見http:///build-android-source-and-fix-issue/這 篇帖子,基本各種問題都進(jìn)行了說(shuō)明,補(bǔ)充一點(diǎn)就是,在duplicate entry 問題時(shí),正常find都找出的是2個(gè),直接刪除一個(gè)就好了,但有幾個(gè)是find出4項(xiàng),這里需要仔細(xì)看一下,這4項(xiàng)中倆倆類似,只是路徑中某個(gè)文件夾不 同,刪除時(shí),刪除那個(gè)最高級(jí)目錄不同的兩個(gè)中的一個(gè)即可。別刪錯(cuò)咯。 make一次我在虛擬機(jī)上,單核來(lái)跑,一般長(zhǎng)達(dá)3個(gè)小時(shí)左右需要耐心等待,如果編譯中出現(xiàn)錯(cuò)誤,看一下,解決后,一般不用make clean,再make的方式,直接make,一般是可以由錯(cuò)誤點(diǎn)繼續(xù)編譯的,節(jié)省時(shí)間。 |
|