如何在 Ubuntu 9.10 下編譯 Android 源碼[簡單可靠]

==========================================
如何在 Ubuntu 9.10 下編譯 Android 源碼
==========================================

問題:Ubuntu 升級爲 9.10, 後 Android 源碼沒法編譯經過怎麼辦?

緣由:
    這是 gcc 和 g++ 的版本過高致使的問題。Ubuntu 9.04 是4.3, 而 9.10 是4.4.
    GCC 在 4.4 時把部份 string 相關的 function 回傳值的 type 改變了...
    char* 改爲了 const char*...
    也所以讓一堆本來不是針對最新的gcc來寫的code都沒法編譯成功。

解決方案:使用舊版本的 gcc 和 g++ 。
    一、先下載 gcc-4.3 g++-4.3:         
apt-get install gcc-4.3 g++-4.3

    二、刪除原有的鏈接:         
sudo rm /usr/bin/gcc
sudo rm /usr/bin/g++

    三、添加新的鏈接:         
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.3 /usr/bin/g++



==================================================

問題:Ubuntu 中沒有 Android 要求的 jdk 1.5, 怎麼辦?

解決方案一:安裝 jdk 1.5。
    方法1:從官方網站上下載 jdk 1.5,安裝。
    方法2:在 /etc/apt/sources.list 中添加 9.04 的源:
          deb http://mirrors.163.com/ubuntu/ jaunty main restricted universe multiverse
          deb http://mirrors.163.com/ubuntu/ jaunty-updates main restricted universe multiverse 
php

           更新源,安裝 jdk 1.5。

解決方案二:若是您已經安裝了 jdk 1.6, 請修改 <src_home>/build/core/make.mk。(注,若是是 2.0 版本的源碼,請修改 <src_home>/build/core/main.mk)
    在文件中搜索並分別把:         html

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.5[\. "$$]')

    兩行改爲:         
java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')


    便可。
    
若是你有其它的開發要使用 jdk 1.6 的話,採用解決方案二是一種不錯的選擇,它能夠避免你在兩個 jdk 之間切換。

==================================================
以上方案,在 Ubuntu 9.10 + Android 2.1 環境中測試經過。即正確編譯 Android 2.1 源碼經過。

注意:
    一、對於第二個問題的 解決方案二 請謹慎採用。因爲修改了 Android 原配置文件,對編譯結果的影響未知,建議經詳細測試後再用於商業目的編譯(要否則,出了問題可別找我哈,呵呵)。
    不過到目前爲止,我編譯出來的結果文件,沒有出現任何異常。若是你們發現了問題,不妨回覆分享一下。
    二、若是須要 make sdk,則須要把 javadoc 設置爲 1.5 的。
         安裝 javadoc 1.5版本,而後 sudo update-alternatives --config javadoc,選擇 1.5 版本。
         否則會出現如下錯誤: java

javadoc: 錯誤 - 在 doclet 類 DroidDoc 中,方法 start 已拋出異常 java.lang.reflect.InvocationTargetException
com.sun.tools.javac.code.Symbol$CompletionFailure: 未找到 sun.util.resources.OpenListResourceBundle 的類文件
1 錯誤
make: *** [out/target/common/docs/services-timestamp] 錯誤 45

==================================================
解決了以上兩個問題以後,按照 Android 官方文檔的方法便可順利進行編譯。分享經驗,分享快樂!放心享受 Ubuntu 9.10 帶給您的驚喜吧! 

做者:曾賽
日期:2010-02-25

 

====================
補充:常見問題解決方案
====================linux

1.找不到PRODUCT_POLICY
frameworks/policies/base/PolicyConfig.mk:22: *** No module defined for the given PRODUCT_POLICY (android.policy_phone).

解法: 修改build/tools/findleaves.sh的89行:
#find "${@:0:$nargs}" $findargs -type f -name "$filename" -print |
find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print |


2. fprintf未定義
frameworks/base/tools/aidl/AST.cpp:10: error: 'fprintf' was not declared in
this scope

解法:apt-get install gcc-4.3 g++-4.3,並從新ln gcc 和g++到 gcc-4.3 和g++-4.3

3.安裝sun- java6-jdk,而且在環境變量中設置:
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
export ANDROID_JAVA_HOME=$JAVA_HOME
android

這部分摘自:http://embeddeder.spaces.live.com/Blog/cns!8006E36532087D51!213.entry
git

附後:(from http://forum.xda-developers.com/archive/index.php/t-633274.htmlweb

I notice that there is quiet a few people around that are having issues building the source, due to the lack on Sun-Java5 (1.5 JDK) in the Ubuntu Repositories.

In a hope it will encourage more developers, I'll post the following, which will build a full eclair system, on a new Ubuntu 9.10 x64 system.

shell

$ mkdir ~/mydroid
$ mkdir mydroid/java5-packages
$ cd ~mydroid/java5-packages
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jre_1.5.0-18-1_all.deb
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-bin_1.5.0-18-1_amd64.deb
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-demo_1.5.0-18-1_amd64.deb
$ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jdk_1.5.0-18-1_amd64.deb
$ 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
$ sudo dpkg -i --ignore-depends=sun-java5-bin sun-java5-jre_1.5.0-18-1_all.deb
$ sudo dpkg -i sun-java5-bin_1.5.0-18-1_amd64.deb
$ sudo dpkg -i --ignore-depends=sun-java5-jdk sun-java5-demo_1.5.0-18-1_amd64.deb
$ sudo dpkg -i sun-java5-jdk_1.5.0-18-1_amd64.deb
$ sudo update-java-alternatives -s java-1.5.0-sun
$ cd ..
$ wget http://android.git.kernel.org/repo
$ sudo mv repo /usr/bin/
$ chmod a+x /usr/bin/repo
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair
$ rep sync
$ cd external/webkit/
$ git cherry-pick 18342a41ab72e2c21931afaaab6f1b9bdbedb9fa
$ cd ../../
$ wget --referer=http://developer.htc.com/google-io-device.html http://member.america.htc.com/download/RomCode/ADP/signed-google_ion-ota-14721.zip?
$ cd vendor/htc/sapphire-open/
$ ./unzip-files.sh
$ cd ../../../
$ . build/envsetup.sh
$ lunch aosp_sapphire_us-eng
$ make


That's it? Ok, So it was a lot... Hope this helps someone get the 1.5 JDK on their Ubuntu system (and build eclair)
相關文章
相關標籤/搜索