android源码,SDK及ADT编译

  • 格式:doc
  • 大小:43.50 KB
  • 文档页数:9

android源码,SDK及ADT编译收藏作为一个android菜鸟,经过一个多礼拜的尝试,终于成功的在linux下编译android源码和SDK,并在eclipse下开发应用程序。

虽然这一结果很简单,但是过程中小问题和小错误不断,任何一个错误都能让整个工作进行不下去,让人非常抓狂。

因此想归纳一下在此过程中到一些心得和经验。

a.下载android源代码随便google一下都可以找到很多关于下载android源码的文章,这里引述一篇我觉得写的比较完整的文章:1、安装一些环境sudo apt-get install build-essentialsudo apt-get install makesudo apt-get install gccsudo apt-get install g++sudo apt-get install libc6-devsudo apt-get install patchsudo apt-get install texinfosudo apt-get install libncurses-devsudo apt-get install git-core gnupgsudo apt-get install flex bison gperf libsdl-dev libesd0-devlibwxgtk2.6-dev build-essential zip curlsudo apt-get install ncurses-devsudo apt-get install zlib1g-devsudo apt-get install valgrindsudo 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的linkcd /etc/alternativessudo rm javadoc.1.gzsudo ln -s /usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gz javadoc.1.gzsudo rm javadocsudo ln -s /usr/lib/jvm/java-1.5.0-sun/bin/javadoc javadoc2、设置环境变量vim ~/.bashrc在.bashrc中新增或整合PATH变量,如下#java 程序开发/运行的一些环境变量JAVA_HOME=/usr/lib/jvm/java-6-sunJRE_HOME=${JAVA_HOME}/jreexport ANDROID_JAVA_HOME=$JAVA_HOMEexport CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATHexport JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/binexport JAVA_HOME;export JRE_HOME;export CLASSPATH;HOME_BIN=~/bin/export PATH=${PATH}:${JAVA_PATH}:${JRE_PATH}:${HOME_BIN};#echo $PATH;最后,同步这些变化:source ~/.bashrc3.初始化版本库如果是想把Android当前主线上最新版本的所有的sourcecode拿下来,我们需要repo的帮助。

先建立一个目录,比如~/android,进去以后用repo init命令即可。

repo init -u git:///platform/manifest.git这个过程会持续很长的时间(至少可以好好睡一觉),具体要多少时间就取决于网络条件了最后会看到repo initialized in /android这样的提示,就说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。

如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:repo init -u git:///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 definedfor 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.3apt-get install gcc-4.3 g++-4.3因为ubuntu 9.10自带到是gcc 4.4,因此需要重新下载gcc 4.3,最后设置gcc软连接到gcc 4.3进入/usr/bincd /usr/bin建个软连接ln -s gcc-4.3 gccln -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.编译sdkmake sdk 就行e.安装ADTADT到安装非常简单,网上有大量的介绍。

这里需要说明的是当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上也很难找到解决的方法,最可恨的是很多网站还被封了,只有再去翻墙,所以想写这样一篇小结以记录,也希望能给有类似问题的人一些帮助.。