android源码,SDK及ADT编译

来源:互联网 发布:数据质量常用度量维度 编辑:程序博客网 时间:2024/04/30 05:42

作为一个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不包括makesdk),用sun-java6-jdk是没有问题的。而make sdk,就会有问题,严格来说是在makedoc出问题,它需要的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上也很难找到解决的方法,最可恨的是很多网站还被封了,只有再去翻墙,所以想写这样一篇小结以记录,也希望能给有类似问题的人一些帮助.