Debian squeeze 下 Android Froyo 编译过程小结

来源:互联网 发布:佛山万科金域名都 编辑:程序博客网 时间:2024/04/28 10:14

最近公司在做一个新的Android的项目,需要修改Android的源代码。这就需要自己来搭建一个Linux下的开发环境。

因为之前的Android开发都是Eclipse + SDK,编出APK Package之后,交付客户即可,所以一直没有认真地来做一下Android的编译。这次有机会完整的搞了一下,这里记录一下整个过程,以及自己遇到的一些问题,以备后面查询。


按说现在版本都到3.0了,可是现在主流机型,还是2.2和2.3居多。也许很快大部分机器都升级到3.0甚至更高了,不过换汤不换药,基本的编译流程差别不大。


1.  操作系统和配置

我使用OS是Debian squeeze 版本,没有使用流行的ubuntu,原因很简单,现成的OS,运行也很稳定。CPU是双核的1.8G,硬盘也有几十G的剩余空间。听说4.0编译需要耗费大量资源,恐怕这个机器是没戏了。这个机器还是最好性能好一些,内存越大越好,内核越多越好,响应编译的速度就会有提高。


2.  编译软件的安装

Google android 的官方网站上已经有详细的说明,见网址:http://source.android.com/source/initializing.html .

主要是要安装JDK1.5 (因为是Froyo),python 和 git。要注意的是, python 版本要用2.x的,因为python3.x的语法有变化。

我在安装JDK1.5时遇到了点小麻烦。squeeze版本的默认源里,可能没有JDK1.5的安装包。而google给出的指导中的的方法,因为是ubuntu的源,也不好用。我采用的方法是:修改源/etc/apt/source.list 中的的版本名称squeeze lenny(就是上一个发行版本), 然后就是

sudo aptitude update 
sudo aptitude install sun-java5-jdk

安装JDK1.5 。如果以前安装了JDK1.6,一定要把之前的全部remove,包括sun-java6-jdk, sun-java6-jre等。


接着就要安装编译时需要的一些package,我是32位系统,按照指导应该安装以下的package:

$ sudo apt-get install git-core gnupg flex bison gperf build-essential \  zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \  libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \  libxml2-utils
我在这里就走了一些弯路,因为有些package已经装过,所以最开始的时候没有全部安装,导致编译过程中因为缺少某个package而出错,回头来一个一个安装。所以还是建议全都给装上。

我还遇到一个情况,就是安装的dev的package,比原来安装的版本号要低,我都是强制采用低版本,这样次才能满足编译android代码的需要。


3. 获取源代码

Google的网站上也有详细说明:http://source.android.com/source/downloading.html .

第一步就是下载和配置repo,按照上面说明做就行。因为是下载Froyo,就需要在初始化repo是使用以下的命令

repo init -u https://android.googlesource.com/platform/manifest -b android-2.2.2_r1
各个版本对应的tag名称可以在这里查询:http://source.android.com/source/build-numbers.html .

第二步就是下载代码,repo sync命令会完成所有模块的代码的下载。耐心等待吧~

4.  开始编译代码

Google网站上的说明:http://source.android.com/source/building.html .

一共是三个步骤:初始化环境,设置target,编译代码生成image

第一步:初始化环境,按照说明做。
第二步:选择target。根据需要选择,我是选择的模拟器运行的image,full-eng。
第三步: run make 。我在这个地方陷入误区,指导上说make后加上-jx 参数,可以充分发挥CPU多线程的优势,我也没仔细看,弄了个-j8,没想到编了一会儿就死机了。后来降到-j4也不行,最后干脆不带这个参数了,才保证编译顺利完成。我分析,可能是多线程后,内存不足导致死机,仅仅是猜测了,没有深究。

在编译完整个项目后,终端会出现如下提示: 
  Install system fs image: out/target/product/generic/system.img 
  Target ram disk: out/target/product/generic/ramdisk.img 
  Target userdata fs image: out/target/product/generic/userdata.img 
  Installed file list: out/target/product/generic/installed-files.txt 

这些生成的image作为emulator的启动参数后,就可以看到效果了。

5. 总结
只要准备充分,软件安装正确,还是比较顺利的,编译时间大概1个多小时吧。编译好后,正对每个app,都可以单独进行编译。

6. 参考的文章:
http://www.heiqu.com/show-27248-1.html




原创粉丝点击