android源碼,SDK及ADT編譯

來源:互聯網
上載者:User

為一個android菜鳥,經過一個多禮拜的嘗試,終於成功的在linux下編譯android源碼和SDK,並在eclipse下開發應用程式。
雖然這一結果很簡單,但是過程中小問題和小錯誤不斷,任何一個錯誤都能讓整個工作進行不下去,讓人非常抓狂。因此想歸納一下在此過程中到一些心得和經驗。

a.下載android原始碼

    隨便google一下都可以找到很多關於下載android源碼的文章,這裡引述一篇我覺得寫的比較完整的文章:

1、安裝一些環境

sudo apt-get install build-essential

sudo apt-get install make

sudo apt-get install gcc

sudo apt-get install g++

sudo apt-get install libc6-dev

sudo apt-get install patch

sudo apt-get install texinfo

sudo apt-get install libncurses-dev

sudo apt-get install git-core gnupg

sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

sudo apt-get install ncurses-dev

sudo apt-get install zlib1g-dev

sudo apt-get install valgrind

sudo apt-get install python2.5

安裝java環境

sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts sun-java6-jdk

註:
官方文檔說如果用sun-java6-jdk可出問題,得要用sun-java5-jdk。經測試發現,如果僅僅make(make不包括make
sdk),用sun-java6-jdk是沒有問題的。而make sdk,就會有問題,嚴格來說是在make
doc出問題,它需要的javadoc版本為1.5。

因此,我們安裝完sun-java6-jdk後最好再安裝sun-java5-jdk,或者
只安裝sun-java5-jdk。這裡sun-java6-jdk和sun-java5-jdk都安裝,並只修改javadoc.1.gz和
javadoc。因為只有這兩個是make sdk用到的。這樣的話,除了javadoc工具是用1.5版本,其它均用1.6版本:

sudo apt-get install sun-java5-jdk

修改javadoc的link

cd /etc/alternatives

sudo rm javadoc.1.gz

sudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gz

sudo rm javadoc

sudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc

2、設定環境變數

vim ~/.bashrc

在.bashrc中新增或整合PATH變數,如下

#java 程式開發/啟動並執行一些環境變數

JAVA_HOME=/usr/lib/jvm/java-6-sun

JRE_HOME=${JAVA_HOME}/jre

export ANDROID_JAVA_HOME=$JAVA_HOME

export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH

export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin

export JAVA_HOME;

export JRE_HOME;

export CLASSPATH;

HOME_BIN=~/bin/

export PATH=${PATH}:${JAVA_PATH}:${JRE_PATH}:${HOME_BIN};

#echo $PATH;

最後,同步這些變化:

source ~/.bashrc


3.初始化版本庫

如果是想把Android當前主線上最新版本的所有的sourcecode拿下來,我們需要repo的協助。

先建立一個目錄,比如~/android,進去以後用repo init命令即可。
repo init -u git://android.git.kernel.org/platform/manifest.git

這個過程會持續很長的時間(至少可以好好睡一覺),具體要多少時間就取決於網路條件了

最後會看到 repo initialized in /android這樣的提示,就說明本地的版本庫已經初始化完畢,並且包含了當前最新的sourcecode。

如果想拿某個branch而不是主線上的代碼,我們需要用-b參數制定branch名字,比如:
repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake


裡抓下來的分支是cupcake,網上關於編譯到文章大多是針對cupcake分支,是andoird
1.5版本,但是之前我沒有輸入後面的參數,以致於下到的代碼是主線上的代碼,是android
2.1版本。兩者目錄結構有一些差別,導致當我按照網上的說明步驟來執行遇到錯誤時,不知道是版本不同的原因還是其他什麼原因。因此很奇怪為什麼網上的文
章都是說cupcake的,而沒有怎麼講主線的原始碼編譯。

b.編譯源碼

如果是cupcake,那麼直接make的時候,會出現以下錯誤:

1.frameworks/policies/base/PolicyConfig.mk:22: *** No module
defined for the given PRODUCT_POLICY (android.policy_phone). Stop.錯誤。

  解決辦法:

  在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.frameworks/base/tools/aidl/AST.cpp:10: error: 'fprintf' was not declared
in this scope的錯誤

  解決辦法:

  下載gcc-4.3和g++-4.3

  apt-get install gcc-4.3 g++-4.3

       因為ubuntu 9.10內建到是gcc 4.4,因此需要重新下載gcc 4.3,最後設定gcc軟串連到gcc 4.3

  進入/usr/bin

  cd /usr/bin

  建個軟串連

  ln -s gcc-4.3 gcc

  ln -s g++-4.3 g++

  然後進入android目錄下,執行make,就可以了。

主線代碼則沒有此問題

c.編譯ADT

       如果想用eclipse開發android應用程式,最好是安裝ADT,這樣就可以在eclipse下建立android的工程。

  • 產生ADT eclipse plugins


      $ development/tools/eclipse/scripts/build_server.sh ~/adt/

使用前建議設定一下ECLIPSE_HOME的環境變數,不然會以為沒有裝eclipse,然後幫你download下來。

這裡要非常注意,本人就曾經卡在這裡,始終編譯不過。一開始會提示eclipse的什麼什麼jar找不到,因此fail。這主要是因為我到
ECLIPSE_HOME到環境變數設定錯誤。我之前裝的eclipse只從新力得上面抓下來的,好像找不到eclipse所在到目錄是哪個,結果就設定
了一個名為eclipse的檔案夾作為環境變數。因此後來直接從eclipse的官網上下了一個,以為這樣就可以。結果杯具的是下到是一個eclipse
Galileo,到頭來還是提示eclipse什麼什麼檔案找不到。最後實在沒法,索性把eclipse刪個乾淨,讓程式自己去下eclipse,發現抓
的是eclipse ganymede。在此要鄭重說明一下,自己去下的話應該下載jee的ganymade,而不能是java
的ganymade,具體原因試試就知道了。

主線代碼編譯ADT的時候方法相同,但是沒有development/tools/eclipse這個目錄,而是在bin/sdk/eclipse這個目錄

d.編譯sdk

      make sdk 就行

e.安裝ADT

    ADT到安裝非常簡單,網上有大量的介紹。這裡需要說明的是當ADT安裝好以後去建立一個android工程後,在build android相關項目的時候總是報告一堆錯誤,都是由類似“W/ResourceType( 2888): Unable to get buffer of resource asset file
”這樣的錯誤引起的,我解決的辦法是覆蓋android.jar下的resource.arsc,網上還有其他的說法是build
sdk的時候應該輸入 make
PRODUCT-sdk-sdk,或者是更改frameworks/base/tools/include/Asset/h
,講其中的1*1024*1024改成2*1024*1024。我都試過了,但是不管用。。

後記,這個過程真的很鬱悶,因為很多普遍的問題我都遇到了,不普遍的問題我也遇到了,有的時候google上也很難找到解決的方法,最可恨的是很多網站還被封了,只有再去翻牆,所以想寫這樣一篇小結以記錄,也希望能給有類似問題的人一些協助.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.