1 . 參考android官方網站
======>>>>Ubuntu Linux (32-bit x86)
(1) $ sudo 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
安裝如下開發環境必需軟件:(sun-java5-jdk應該找不到,可暫時不安裝,下面會說明)
o Git 1.5.4 or newer and the GNU Privacy Guard.
o JDK 5.0, update 12 or higher.Java 6 is not supported, because of incompatibilities with @Override.
o flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev (optional), build-essential, zip, curl.
(2) $ sudo apt-get install valgrind
(3)$ sudo apt-get install lib32readline5-dev
======>>>>Ubuntu Linux (64-bit x86) 如果安裝linux 64位
(1) $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
(2) $ sudo update-java-alternatives -s java-1.5.0-sun
(3)$ sudo ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so
2. 安裝 Repo( 下載代碼工具)
Repo is a tool that makes it easier to work with Git in the context of Android. For more information about Repo, see Using Repo and Git .
To install, initialize, and configure Repo, follow these steps:
(1. Make sure you have a~/bindirectory in your home directory, and check to be sure that this bin directory is in your path:
$ cd ~
$ mkdir bin ($ export PATH=$PATH:/home/zhengmingsang/bin)
$ echo $PATH
(2. Download thereposcript and make sure it is executable:
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
3. Initializing a Repo client(其實就是下載開源android開發代碼,如果自己有開發源碼,這一步可忽略)
(1. Create an empty directory to hold your working files:
$ mkdir mydroid
$ cd mydroid
(2. Run "repo init" to bring down the latest version of Repo with all its most recent bug fixes. You must specify a URL for the manifest:
$ repo init -u git://android.git.kernel.org/platform/manifest.git
* If you would like to check out a branch other than "master", specify it with -b, like:
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
(3. When prompted, configure Repo with your real name and email address. If you plan to submit code, use an email address that is associated with a Google account .
A successful initialization will end with a message such as
repo initialized in /mydroid
To pull down files to your working directory from the repositories as specified in the default manifest, run
$ repo sync (這一步需要很長時間)
Verifying Git Tags
Load the following public key into your GnuPG key database.The key is used to sign annotated tags that represent releases.
$ gpg --import
then paste the key(s) below, and press Control-D to end the input and process the keys. After importing the keys, you can verify any tag with
$ git tag -v tagname
4. 安裝上面提到的sun-java5-jdk(ubuntu10.04源自帶的版本是java1.6,編譯android可能會有問題)
早在ubuntu 9.10中,ubuntu就已經去除了對sun-java5-jdk的支持,但是爲了進行android的開發,又必須安裝sun- java5-jdk。那麼在享受ubuntu 10.04好處的同時,如何來進行sun-java5-jdk的安裝那。經過多次的摸索,下面是一個方案:
(1.編輯/etc/apt/sources.list文件,將安裝源更改爲ubuntu 9.04的安裝源爲: sudo apt-get update
deb http://tw.archive.Ubuntu.com/ubuntu jaunty main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-security main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-backports main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-proposed main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-security main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-backports main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-proposed main restricted universe multiverse
(2.安裝java5,apt-get install sun-java5-jdk.
(3.更改默認jdk的方法如下:
update-alternatives --config java
顯示如下,然後鍵入java- 1.5.0-sun的編號:
有 2 個選項可用於替換項 java (提供 /usr/bin/java)。
選擇 路徑 優先級 狀態
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自動模式
1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java 53 手動模式
2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手動模式
要維持當前值[*]請按回車鍵,或者鍵入選擇的編號:1
5.查看當前的java版本:
java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Client VM (build 1.5.0_22-b03, mixed mode, sharing)
同理,更改默認的javac,方法爲update-alternatives --config javac.
接着就可以進行android的編譯了。
一切順利,世界終於太平了!
6. 可能會遇到的問題總結
Building the code
To build the files, runmakefrom within your working directory:
$ cd ~/mydroid
$ make
(1)If your build fails, complaining about a missing "run-java-tool", try setting the ANDROID_JAVA_HOME env var to $JAVA_HOME before making.E.g.,
$ export ANDROID_JAVA_HOME=$JAVA_HOME
(2)問題: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++ 。
1、先下載 gcc-4.3 g++-4.3:
源碼打印?
1. apt-get install gcc-4.3 g++-4.3
apt-get install gcc-4.3 g++-4.3
2、刪除原有的連接:
源碼打印?
1. sudo rm /usr/bin/gcc<br>sudo rm /usr/bin/g++
sudo rm /usr/bin/gcc
sudo rm /usr/bin/g++
3、添加新的連接:
源碼打印?
1. sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc<br>sudo ln -s /usr/bin/g++-4.3 /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++
(3)問題: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
更新源,安裝 jdk 1.5。
解決方案二:如果您已經安裝了 jdk 1.6, 請修改 <src_home>/build/core/make.mk。(注,如果是 2.0 版本的源碼,請修改 <src_home>/build/core/main.mk)
在文件中搜索並分別把:
源碼打印?
1. java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1/.5[/. "$$]')<br>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/.5[/. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1/.5[/. "$$]')
兩行改成:
源碼打印?
1. java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1/.6[/. "$$]')<br>javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1/.6[/. "$$]')
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 源碼通過。
注意:
1、對於第二個問題的 解決方案二 請謹慎採用。由於修改了 Android 原配置文件,對編譯結果的影響未知,建議經詳細測試後再用於商業目的編譯(要不然,出了問題可別找我哈,呵呵)。
不過到目前爲止,我編譯出來的結果文件,沒有出現任何異常。如果大家發現了問題,不妨回覆分享一下。
2、如果需要 make sdk,則需要把 javadoc 設置爲 1.5 的。
安裝 javadoc 1.5版本,然後 sudo update-alternatives --config javadoc,選擇 1.5 版本。
不然會出現以下錯誤:
源碼打印?
1. javadoc: 錯誤 - 在 doclet 類 DroidDoc 中,方法 start 已拋出異常 java.lang.reflect.InvocationTargetException<br>com.sun.tools.javac.code.Symbol$CompletionFailure: 未找到 sun.util.resources.OpenListResourceBundle 的類文件<br>1 錯誤<br>make: *** [out/target/common /docs/services-timestamp] 錯誤 45
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
金寶博:122.252.25.188
==================================================
解決了以上兩個問題之後,按照 Android 官方文檔的方法即可順利進行編譯。分享經驗,分享快樂!放心享受 Ubuntu 9.10 帶給您的驚喜吧!
作者:曾賽
日期:2010-02-25
====================
補充:常見問題解決方案
====================
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
這部分摘自:http://embeddeder.spaces.live.com/Blog/cns!8006E36532087D51!213.entry
附後:(from http://forum.xda-developers.com/archive/index.php/t-633274.html)
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.
源碼打印?
1. $ mkdir ~/mydroid
2. $ mkdir mydroid/java5-packages
3. $ cd ~mydroid/java5-packages
4. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jre_1.5.0-18-1_all.deb
5. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-bin_1.5.0-18-1_amd64.deb
6. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-demo_1.5.0-18-1_amd64.deb
7. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jdk_1.5.0-18-1_amd64.deb
8. $ 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
9. $ sudo dpkg -i --ignore-depends=sun-java5-bin sun-java5-jre_1.5.0-18-1_all.deb
10. $ sudo dpkg -i sun-java5-bin_1.5.0-18-1_amd64.deb
11. $ sudo dpkg -i --ignore-depends=sun-java5-jdk sun-java5-demo_1.5.0-18-1_amd64.deb
12. $ sudo dpkg -i sun-java5-jdk_1.5.0-18-1_amd64.deb
13. $ sudo update-java-alternatives -s java-1.5.0-sun
14. $ cd ..
15. $ wget http://android.git.kernel.org/repo
16. $ sudo mv repo /usr/bin/
17. $ chmod a+x /usr/bin/repo
18. $ repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair
19. $ rep sync
20. $ cd external/webkit/
21. $ git cherry-pick 18342a41ab72e2c21931afaaab6f1b9bdbedb9fa
22. $ cd ../../
23. $ wget --referer=http://developer.htc.com/google-io-device.html http://member.america.htc.com/download/RomCode/ADP/signed-google_ion-ota-14721.zip?
24. $ cd vendor/htc/sapphire-open/
25. $ ./unzip-files.sh
26. $ cd ../../../
27. $ . build/envsetup.sh
28. $ lunch aosp_sapphire_us-eng
29. $ make
$ 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)
(4).
ubuntu10.04 問題論壇地址:http://www.linuxidx.com/linux.php?q=Ubuntu10.04+%E5%AE%89%E8%A3 %85%E6%96%B0%E7%89%88Wine
將源碼編譯完後下一步的動作就是要看看效果了,怎樣啓動模擬器是一個問題。網上有很多種做法,下面介紹一種簡單的方式進行處理。
在下載源碼的目錄下,make sdk命令,編譯sdk。而後在/home/stone/working-directory-name/out/host/linux-x86多
一個 sdk目錄。在sdk的 tools目錄下使用命令創建虛擬設備,此時創建方式和1.5有所不同其命令是:
./android list targets
./android create avd -n sphone -t android-7
2.1版本的要求其 targetid 必須是 android-7這種模式。
而後啓動模擬器:
命令是:
./emulator -avd sphone
至此關於android源碼下載、編譯、模擬器運行的基本知識介紹完畢。下步就是深入分析其源碼。
在這個過程中下載源碼大約下了8個小時,編譯源碼用了3個小時,編譯sdk用時20分鐘。就是這樣等待中見證欣喜。
$ sudo apt-get install valgrind
* Intrepid ( 8.10) users may need a newer version of libreadline:
$ sudo apt-get install lib32readline5-dev
Ubuntu Linux (64-bit x86)
This has not been as well tested. Please send success or failure reports to [email protected] .
The Android build requires a 32-bit build environment as well as some other tools:
* Required Packages:
o Git, JDK, flex, and the other packages as listed above in the i386 instructions:
o JDK 5.0, update 12 or higher.Java 6 is not supported, because of incompatibilities with @Override.
o Pieces from the 32-bit cross-building environment
o X11 development
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
* Set the system to use the right version of java by default:
$ sudo update-java-alternatives -s java-1.5.0-sun
* X11: Ubuntu doesn't have packages for the X11 libraries, but that can be worked around with the following command:
$ sudo ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so
Installing Repo
Repo is a tool that makes it easier to work with Git in the context of Android. For more information about Repo, see Using Repo and Git .
To install, initialize, and configure Repo, follow these steps:
1. Make sure you have a~/bindirectory in your home directory, and check to be sure that this bin directory is in your path:
$ cd ~
$ mkdir bin ($ export PATH=$PATH:/home/zhengmingsang/bin)
$ echo $PATH
2. Download thereposcript and make sure it is executable:
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo
Initializing a Repo client
1. Create an empty directory to hold your working files:
$ mkdir mydroid
$ cd mydroid
2. Run "repo init" to bring down the latest version of Repo with all its most recent bug fixes. You must specify a URL for the manifest:
$ repo init -u git://android.git.kernel.org/platform/manifest.git
* If you would like to check out a branch other than "master", specify it with -b, like:
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
3. When prompted, configure Repo with your real name and email address. If you plan to submit code, use an email address that is associated with a Google account .
A successful initialization will end with a message such as
repo initialized in /mydroid
To pull down files to your working directory from the repositories as specified in the default manifest, run
$ repo sync
Verifying Git Tags
Load the following public key into your GnuPG key database.The key is used to sign annotated tags that represent releases.
$ gpg --import
then paste the key(s) below, and press Control-D to end the input and process the keys. After importing the keys, you can verify any tag with
$ git tag -v tagname
(2).
早在ubuntu 9.10中,ubuntu就已經去除了對sun-java5-jdk的支持,但是爲了進行android的開發,又必須安裝sun- java5-jdk。那麼在享受ubuntu 10.04好處的同時,如何來進行sun-java5-jdk的安裝那。經過多次的摸索,下面是一個方案:
1.編輯/etc/apt/sources.list文件,將安裝源更改爲ubuntu 9.04的安裝源爲: sudo apt-get update
deb http://tw.archive.Ubuntu.com/ubuntu jaunty main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-security main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-backports main restricted universe multiverse
deb http://tw.archive.Ubuntu.com/ubuntu jaunty-proposed main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-security main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-backports main restricted universe multiverse
deb-src http://tw.archive.Ubuntu.com/ubuntu jaunty-proposed main restricted universe multiverse
2.安裝java5,apt-get install sun-java5-jdk.
4.更改默認jdk的方法如下:
update-alternatives --config java
顯示如下,然後鍵入java- 1.5.0-sun的編號:
有 2 個選項可用於替換項 java (提供 /usr/bin/java)。
選擇 路徑 優先級 狀態
------------------------------------------------------------
* 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自動模式
1 /usr/lib/jvm/java-1.5.0-sun/jre/bin/java 53 手動模式
2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手動模式
要維持當前值[*]請按回車鍵,或者鍵入選擇的編號:1
5.查看當前的java版本:
java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Client VM (build 1.5.0_22-b03, mixed mode, sharing)
同理,更改默認的javac,方法爲update-alternatives --config javac.
接着就可以進行android的編譯了。
一切順利,世界終於太平了!
///////////////////////////////////////////////////////////////////////
Building the code
To build the files, runmakefrom within your working directory:
$ cd ~/mydroid
$ make
If your build fails, complaining about a missing "run-java-tool", try setting the ANDROID_JAVA_HOME env var to $JAVA_HOME before making.E.g.,
$ export ANDROID_JAVA_HOME=$JAVA_HOME
///////////////////////////////////////////////////////////////////
(3).
http://my.oschina.net/zengsai/blog/2903
==========================================
如何在 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++ 。
1、先下載 gcc-4.3 g++-4.3:
源碼打印?
1. apt-get install gcc-4.3 g++-4.3
apt-get install gcc-4.3 g++-4.3
2、刪除原有的連接:
源碼打印?
1. sudo rm /usr/bin/gcc<br>sudo rm /usr/bin/g++
sudo rm /usr/bin/gcc
sudo rm /usr/bin/g++
3、添加新的連接:
源碼打印?
1. sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc<br>sudo ln -s /usr/bin/g++-4.3 /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
更新源,安裝 jdk 1.5。
解決方案二:如果您已經安裝了 jdk 1.6, 請修改 <src_home>/build/core/make.mk。(注,如果是 2.0 版本的源碼,請修改 <src_home>/build/core/main.mk)
在文件中搜索並分別把:
源碼打印?
1. java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1/.5[/. "$$]')<br>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/.5[/. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1/.5[/. "$$]')
兩行改成:
源碼打印?
1. java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1/.6[/. "$$]')<br>javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1/.6[/. "$$]')
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 源碼通過。
注意:
1、對於第二個問題的 解決方案二 請謹慎採用。由於修改了 Android 原配置文件,對編譯結果的影響未知,建議經詳細測試後再用於商業目的編譯(要不然,出了問題可別找我哈,呵呵)。
不過到目前爲止,我編譯出來的結果文件,沒有出現任何異常。如果大家發現了問題,不妨回覆分享一下。
2、如果需要 make sdk,則需要把 javadoc 設置爲 1.5 的。
安裝 javadoc 1.5版本,然後 sudo update-alternatives --config javadoc,選擇 1.5 版本。
不然會出現以下錯誤:
源碼打印?
1. javadoc: 錯誤 - 在 doclet 類 DroidDoc 中,方法 start 已拋出異常 java.lang.reflect.InvocationTargetException<br>com.sun.tools.javac.code.Symbol$CompletionFailure: 未找到 sun.util.resources.OpenListResourceBundle 的類文件<br>1 錯誤<br>make: *** [out/target/common /docs/services-timestamp] 錯誤 45
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
金寶博:122.252.25.188
==================================================
解決了以上兩個問題之後,按照 Android 官方文檔的方法即可順利進行編譯。分享經驗,分享快樂!放心享受 Ubuntu 9.10 帶給您的驚喜吧!
作者:曾賽
日期:2010-02-25
====================
補充:常見問題解決方案
====================
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
這部分摘自:http://embeddeder.spaces.live.com/Blog/cns!8006E36532087D51!213.entry
附後:(from http://forum.xda-developers.com/archive/index.php/t-633274.html)
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.
源碼打印?
1. $ mkdir ~/mydroid
2. $ mkdir mydroid/java5-packages
3. $ cd ~mydroid/java5-packages
4. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jre_1.5.0-18-1_all.deb
5. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-bin_1.5.0-18-1_amd64.deb
6. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-demo_1.5.0-18-1_amd64.deb
7. $ wget http://mirror.pacific.net.au/linux/ubuntu/pool/multiverse/s/sun-java5/sun-java5-jdk_1.5.0-18-1_amd64.deb
8. $ 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
9. $ sudo dpkg -i --ignore-depends=sun-java5-bin sun-java5-jre_1.5.0-18-1_all.deb
10. $ sudo dpkg -i sun-java5-bin_1.5.0-18-1_amd64.deb
11. $ sudo dpkg -i --ignore-depends=sun-java5-jdk sun-java5-demo_1.5.0-18-1_amd64.deb
12. $ sudo dpkg -i sun-java5-jdk_1.5.0-18-1_amd64.deb
13. $ sudo update-java-alternatives -s java-1.5.0-sun
14. $ cd ..
15. $ wget http://android.git.kernel.org/repo
16. $ sudo mv repo /usr/bin/
17. $ chmod a+x /usr/bin/repo
18. $ repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair
19. $ rep sync
20. $ cd external/webkit/
21. $ git cherry-pick 18342a41ab72e2c21931afaaab6f1b9bdbedb9fa
22. $ cd ../../
23. $ wget --referer=http://developer.htc.com/google-io-device.html http://member.america.htc.com/download/RomCode/ADP/signed-google_ion-ota-14721.zip?
24. $ cd vendor/htc/sapphire-open/
25. $ ./unzip-files.sh
26. $ cd ../../../
27. $ . build/envsetup.sh
28. $ lunch aosp_sapphire_us-eng
29. $ make
$ 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)
(4).
ubuntu10.04 問題論壇地址:http://www.linuxidx.com/linux.php?q=Ubuntu10.04+%E5%AE%89%E8%A3 %85%E6%96%B0%E7%89%88Wine
將源碼編譯完後下一步的動作就是要看看效果了,怎樣啓動模擬器是一個問題。網上有很多種做法,下面介紹一種簡單的方式進行處理。
在下載源碼的目錄下,make sdk命令,編譯sdk。而後在/home/stone/working-directory-name/out/host/linux-x86多
一個 sdk目錄。在sdk的 tools目錄下使用命令創建虛擬設備,此時創建方式和1.5有所不同其命令是:
./android list targets
./android create avd -n sphone -t android-7
2.1版本的要求其 targetid 必須是 android-7這種模式。
而後啓動模擬器:
命令是:
./emulator -avd sphone
至此關於android源碼下載、編譯、模擬器運行的基本知識介紹完畢。下步就是深入分析其源碼。
在這個過程中下載源碼大約下了8個小時,編譯源碼用了3個小時,編譯sdk用時20分鐘。就是這樣等待中見證欣喜。
Ubuntu 10.04環境下載&編譯Android-2.2.1 (froyo) 源代碼 [轉]
應一個在電信做android開發的哥們要求,幫忙把Goole未在sdk中打包的API(即:mms彩信功能),打包到自己編譯的sdk裏面。偶用了差 不多5天+5夜的時間,雖然沒有成功。但對於Ubuntu 10.04環境下載&編譯Android-2.2.1 (froyo)源代碼這個過程是相當熟悉啦,來來回回,在虛擬機裏面做了5遍!其中的辛苦與開心只有自己纔有深刻的體會。現在分享給大家,同時也感謝網絡 上的筒子們。
1. 前言
本文敘述瞭如何從零開始搭建基於Google官方Android 2.2.1(froyo)源碼的開發環境,包括如何下載源代碼、編譯源代碼,以及在模擬器中運行編譯生成的鏡像。文中開發機是基於Ubuntu 10.04的,同樣適用於其他版本的Ubuntu。現在需要弄清楚一下幾點,防止後面出現誤操作: 下載源代碼是用參數:repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo (下載的是2.2.1版本,編譯環境操作系統必須是32位的,jdk1.5版本的—jdk1.5沒有64位版本)。如果是沒有帶參數的下載源代碼,將會下載所有的源代碼,編譯環境要求:操作系統64位,jdk1.6,(偶是2010年10月15日做)但很有可能會出現交叉編譯工具錯誤:“ /bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc: 沒有那個文件或目錄 ”(實際上是有arm-eabi-gcc這個文件的,偶懷疑是版本問題–32位的,而環境要求是64位的—– 下載全部代碼)
2. 下載JDK 1.5 (不建議此下載方式,防止配置環境參數出錯。建議用apt-get install方式,請跳轉到:第4步)
編譯Android源碼需要JDK1.5版(主要是需要其中的javadoc),1.6版是 不兼容的。JDK1.5已經停止支持,其最 終的版本是JDK 5.0 Update 22。
可從Sun官網上下載:
http://java.sun.com/javase/downloads/5u22/jdk
選擇平臺Linux,勾選同意許可協議:
單擊Continue,在彈出的頁面中一共有兩個下載,選第一個jdk-1_5_0_22-linux-i586.bin下載:
3. 部署JDK 1.5
3.1 解壓縮JDK
以下命令均在root賬戶上執行,非root賬戶執行某些命令可能需要加sudo。
將jdk-1_5_0_22-linux-i586.bin放在root目 錄下。進入該目錄:
cd ~
然後賦予該bin文件可執行屬性:
chmod +x jdk-1_5_0_22-linux-i586.bin
再執行安裝(注意前面有./):
./jdk-1_5_0_22-linux-i586.bin
跳過協議閱讀。
最後一行:
Do you agree to the above license terms? [yes or no]
鍵入yes,然後回車,開始解壓。默認會解壓到當前目錄下的jdk1.5.0_22目錄下(此處是~/ jdk1.5.0_22)。
3.2 JDK版本切換
如果同時需要使用JDK1.6版做應用開發,則系統中將同時存在JDK1.5和JDK1.6。 因此需要實現能夠在不同版本間切換。如果不使用JDK1.6,請做完1.5版 的設置後跳至3.3節。
這裏使用update-alternatives命令實現。
首先爲JDK1.5版生成可選配置選項:
update-alternatives –install /usr/bin/jdk jdk /root/jdk1.5.22 255
(sudo update-alternatives –install /usr/bin/jdk jdk /home/ynb/jdk1.5.0_22 255)
/usr/bin/jdk是符號鏈接,它指 向/etc/alternatives/jdk(由第2個參數 給出的),/root/jdk1.5.22(/home/ynb/jdk1.5.0_22)是 實際目的鏈接,255是優先級(任意整數, 在automatic mode自動模式 時,數字大的優先級較高,被選爲默認配置選項)。
然後再爲JDK1.6版生成(如果有JDK1.6的話。不使用JDK1.6的請跳至3.3節):
update-alternatives –install /usr/bin/jdk jdk /root/jdk1.6.20 0
這樣,默認jdk版本即爲1.5版。 需要切換到1.6版時,請使用update-alternatives –config jdk
3.3 配置JDK環境變量
下面開始配置環境變量。
在終端中執行:sudo gedit ~/.bashrc
修改.bashrc文件,添加下面語句:
#set java environment
export JAVA_HOME=/usr/bin/jdk
export JRE_HOME=JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
該段代碼最好設置在文件的尾部。
保存文件。在終端中執行source ~/.bashrc
重啓系統請使用java –version檢查JDK是否 配置正確。
4.用apt-get install方式安裝JDK1.5:
Android 要求的 jdk 1.5,而Ubuntu10.4的源裏只有JDK1.6. 如果安裝了jdk1.6請先卸載:
$sudo apt-get remove remove openjdk-6-jdk
$sudo apt-get remove remove openjdk-6-jre
$sudo apt-get remove remove openjdk-6-jre-headless
安裝jdk1.5目前網上解決方法有兩種:
解決方法一(建議): 安裝JDK1.5
1) 根據官方文檔裏所說,源代碼的編譯必須使用JDK5才能編譯的了,所以這裏偶使用jdk5
2) 需要先更新源,在終端裏執行 sudo vim /etc/apt/sources.list
3) 在source.list裏把以下2行拷貝到文檔最後面:
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
保存退出。
4) 執行 sudo apt-get update 更新源.
5) 配置編譯環境並下載JDK5:sudo apt-get install sun-java5-jdk
解決方法二: 安裝JDK 1.6 , 修改Android源文件。
1) 安裝jdk 1.6,修改<src_top/build/core/make.mk>(如果2.0版本源碼請修改<src_top/build/core/main.mk>)
在文件中搜索並分別把:
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[. "$$]‘)
即可。
推薦使用第一種解決方法。
5. 安裝其他必備組件
在終端上,使用下面的命令安裝:(前面的1、2、3步驟都可以省略啦)
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
因爲JDK1.5在前面已經單獨安裝過了,因此此處apt-get install命令行中沒有加入sun-java5-jdk。
6. 下載Android 源代碼
6.1 安裝repo腳本
首先安裝repo。在當前用戶:~目 錄下新建一個bin目錄。在終端中執行:
cd ~
mkdir bin
然後,向PATH中添加bin路 徑:
export PATH=$PATH:~/bin
然後執行下面兩行指令,下載repo腳本並修改可執行屬性:
curl https://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo
6.2 初始化repo
首先建立一個目錄用來存放Android源代碼:
mkdir mydroid
cd mydroid
然後用最新的列表執行初始化。這裏偶下載android 2.2.1(froyo),因此加了參數 –b froyo:(android 2.2.2(froyo)源碼下載:2G多
repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo )
(下載2.1_r2源碼
repo init -u git://android.git.kernel.org/platform/manifest.git –b android-2.1_r2
下載全部源碼:repo init -u git://android.git.kernel.org/platform/manifest.git)
(下載2.0源碼:
repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair )
(上面下載2.0時有個莫名其妙的問題:
ynb@ynb-pc:~/bin$ repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair
Usage: repo init -u url [options]
出現上面問題,刪除mydroid目錄:rmdir mydroid ; mkdir mydroid2.0 ; cd mydroid2.0;
再:repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair 就可以了)
(如果能通過瀏覽器瀏覽到android源碼的主頁,但運行repo init或repo sync的時候,卻沒法下載源碼,形如:
只需要把git開頭的地址改爲http即可:
[1]
repo init -u http://android.git.kernel.org/platform/manifest.git -b froyo
[2]修改manifest.git裏的地址,也是把git://改爲http://
vim .repo/manifest.git
如:
<?xml version=”1.0″ encoding=”UTF-8″?>
<manifest>
<remote name=”korg”
fetch=”http://android.git.kernel.org/”
review=”review.source.android.com” />
<default revision=”froyo”
remote=”korg” /> )
這中間會問到你的名字和Email。如果你打算上傳代碼,Email須是一個Google賬戶。
repo初始化成功後會看到類似於下面的提 示:
repo initialized in /home/(當前用戶名)/mydroid
最後執行$repo sync開始同步代碼。過程比較漫長,下載速度取決於你的網速(偶的3-4小時左右),中間有可能遇到斷線,重新執行repo sync即可斷點續傳。
7. 編譯Android源代碼
7.1 編譯生成鏡像
$ cd ~/directory
$ source build/envsetup.sh
$ lunch # select 1- generic-eng when the menu popup
$ make -j4 # 4 means the number of concurrent jobs the build can do. This is to speed up the building process
首次編譯非常耗時,取決於機器配置,大約需要2-3小時。有可能會出現:“Permission denied (權限拒絕的提示)” 請命令賦予權限:$cd 無權限文件的當前目錄 回車; $sudo chmod -R +rwx * 回車; 完成後鏡像生成在/root/mydroid/out/target/product/generic下:android源碼編譯後得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系統,system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數據,emulator加載這3個映像文件後,會把 system和 userdata分別加載到 ramdisk文件系統中的system和 userdata目錄下。
7.2 編譯、配置Android SDK
$sudo make sdk
生成對應於該版本源代碼的sdk,此過程用的時間偶的是10多分鐘。
$sudo make PRODUCT-sdk-sdk
生成對應於該版本源代碼的用於生產環境的sdk,此過程用的時間偶的是1個多小時。
自己編譯的SDK位置是:~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86。
8. 在模擬器中運行編譯的鏡像
打開終端,執行android腳本:
$android
出現下圖所示窗口:
選擇左邊第一項Virtual Devices,然後在右邊選擇New,新建一個AVD。
Name:AVD的名稱,隨便取,但只能包含字母和數字以及點、下劃線和連字符, 這裏取名test。
Traget:目標SDK版本,這裏選自己編譯的2.1-r1版Android SDK。
SD Card:SD卡。暫且不填,待需要時再設置。
Skin:皮膚(模擬器屏幕分辨率)。
Hardware:使用默認即可
然後點Create AVD,就創建好了一個AVD。點擊Start即 可啓動模擬器,其運行的是自己編譯的鏡像。
若以後要再次啓動此AVD,請在終端中運行:
emulator –avd test 或 者emulator @test