http://www.eoeandroid.com/thread-38456-1-1.html
周末把系統升級到10.10,首先對Ubuntu在UI上的突飛猛進表示大家讚賞,很多細節都做得不錯,尤其是對字型效果的最佳化。
轉入正題,發現,隨著系統的升級,android編譯的條件也變得相當苛刻了。如果單純的按照老版本的編譯方法,貌似會很容易碰壁。從昨晚到現在,我就把系統重裝了兩次(從去年底入手新筆電到現在就裝過四次系統= =),原因都歸功於新環境下編譯Froyo。
首先,對於新版本的ubuntu,最好用64位的,在32位環境下編譯,在check階段都報錯。之前就是因為我裝的是32位的系統,結果一直沒成功,不得不連夜下載64位系統裝上,杯具得一比。
1. warning ************************************************************
2. warning You are attempting to build on a 32-bit system.
3. warning Only 64-bit build environments are supported beyond froyo/2.2.
4. warning ************************************************************
如果一定要在32位環境下編譯,網上也有解決方案,我試了試,但沒成功。
其次是,編譯器的版本也要注意,就是gcc和g++,剛開始,我一直安裝4.4版本的,結果在編譯的時候,發現不少代碼編譯不通過。起初沒留意,自己邊改 邊把C/C++溫習了一把= =,但終究不是解決的辦法,總會報些不倫不類的低級錯誤。想想估計是編譯器版本的問題,新版本的編譯器對代碼解析更加嚴格了吧。後來還是換回了4.3版本 的。
如果以及安裝來4.4的,可以在安裝4.3後建立連結 1. cd /usr/bin
2. ln -s gcc-4.3 gcc
3. ln -s g++-4.3 g++
然後是,SDK編譯的必要工具包,如果完全挪用32位編譯的工具包,會發現編譯過程中缺少很多必要的libs,出現類似 cannot find -lxxx 的錯誤。因為缺少相關的libs
建議在apt-get install的時候,加上這兩個東東:g++-multilib g++-4.3-multilib
或者,直接大膽的拷貝這個= =sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev java-common unixodbc
還有就是,Java JDK版本,之前都說,android只支援1.5版本的JDK,現在,對於Froyo,貌似支援1.6的了,但杯具的是,不支援1.5,編譯時間在 check階段,會報錯,必須1.6版本的JDK。所以啊,編譯的時候注意了,既然允許1.6了,就不要在1.5上掙紮了,hoho~
最後,就是,做好以上準備之後,make之,以為可以看看電視喝喝茶什麼的,結果,給我來了這麼一個error:
build/core/base_rules.mk:128: *** dalvik/libcore: MODULE.TARGET.JAVA_LIBRARIES.core already defined by libcore. Stop.
網上有解決方案,請大膽的點擊這裡,我沒試,同步太耗時間來,我直接找到base_rules.mk的第128行,用#注釋之!像這樣:#$(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id)))
需要聲明的是,這隻是在非常情況下做的非常處理,如果在這個地方沒報錯,就不用修改源檔案來。
其實,我覺得,在check tools階段,需要校正很多模組與工具,比如什麼系統是32位還是64位啊,JDK那個版本啊之類的,如果檢測到某個工具不滿足要求就報錯了。我們可以 嘗試將這個校正條件給注釋掉,跳過對該工具的檢測。這種檢測應該,我說的是應該,只是為保證安全且成功的編譯而提供的一種校正機制,是需要的,但不是必須 的,所以,在一些非常情況,我們可以做一下非常處理。
以上就是我在10.10倒騰了一天的心得體會,希望對大家有協助,有不對的地方,請大膽拍磚指正,謝謝!