您当前位置:设计在线网 >> Android >> 浏览文章

android源码--SDK及ADT编译问题

分享到:
本文章讲述了android源码--SDK及ADT编译问题.

作为一

个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:$CLASSP ATH

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的工程。 使用前建议设定一下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上也很难找到解决的方法,最可恨的是很多网站还被封了,只有再去翻墙,所以想写这样一篇小结以记录,也希望能给有类似问题的人一些帮助.

推荐阅读:
有关各种平台GPS编程知识总结
Android遇到的not well-formed错误问题解决
Android 下SAX方式解析XML文件操作
推荐文章  
赞助商链接  
热门排行  
主题推广  
中国设计在线网 All Rights Reserved. 互联网违法和不良信息举报
信息产业部备案号:湘ICP备09001063号