Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1084939
  • 博文数量: 226
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2504
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-21 14:12
文章分类

全部博文(226)

文章存档

2011年(1)

2010年(2)

2009年(68)

2008年(4)

2007年(27)

2006年(124)

我的朋友

分类: LINUX

2009-05-27 17:40:31


0. 系统环境

Android目前只支持在Linux和Mac上编译,不支持Windows,这里使用的是Ubuntu 8.10。


1. 获取工具

A. Android源码是通过Git来管理的,首先获取Git 1.5.4或更高版本以及GNU Privacy Guard。

   sudo apt-get install git-core gnupg

B. 获取JDK5.0 update 12或更高版本,目前最高版本是JDK6.0 update 10。

   注意:使用JDK6.0 update 10编译Android系统没有问题,但编译sdk时会出错。

   sudo apt-get install sun-java5-jdk

   sudo apt-get install sun-java6-jdk

C. 获取flex,bison,gperf,libsdl-dev,libesd0-dev,libwxgtk2.6-dev(可选),build-essential,zip,curl。

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

D. 获取Valgrind(可选),此工具可以帮你查找内存泄漏、堆栈破坏以及数组访问越界等错误。

   sudo apt-get install valgrind


2. 安装Repo

   Repo是一个python脚本,被设计用来更简单的获取Android源码,其核心也是使用Git来获取源码。

A. 创建~/bin目录,并将其加入PATH环境变量

   cd ~           (进入用户目录)

   mkdir bin       (创建bin文件夹)

   sudo gedit ~/.bash_profile      (打开.bash_profile文件,在其中加入PATH=$PATH:~/bin)

   . ~/.bash_profile      (使环境变量改变马上生效)

   echo $PATH         (再次检查~/bin是否已经加入PATH环境变量)

B. 下载repo脚本,并将它的属性改为可执行

   curl  > ~/bin/repo         (下载repo)

   chmod a+x ~/bin/repo                                (更改属性)

C. 创建一个保存源码的目录

   mkdir Android        (创建Android目录)

   cd Android            (进入Android目录)

D. 初始化repo工作环境,获取最新的工程清单。

   repo init -u git://

   其中会提示输入姓名和电子邮件,如果需要上传源码到Android项目,请使用gmail的邮箱。

E. 完成

   初始化完成以后,会有一个类似于下面的提示。

   repo initialized in ~/Android

   这时Android目录下面会有一个.repo目录,里面包含Android各个子项目的清单(Manifest)以及其他一些文件。


3. 获取源码

   repo sync             (同步源码)

   这个过程非常的漫长,经常会无故无响应或者断掉,没关系,再重新运行repo sync就可以了。

   不 带参数的repo sync是同步整个Android工程,也可以只同步其中的某一个子项目,使用 repo sync ,其中project_path可以在.repo/manifests /default.xml中找到。在default.xml文件中,有很多形如

   因为kernel子项目比较大,建议单独同步,其他的子项目一起同步:

   repo sync kernel


4. 编译源码

A. 建立java环境

   首先检查是否有JAVA_HOME环境变量,

   echo $JAVA_HOME

   如果没有,建立JAVA_HOME环境变量,

   sudo gedit ~/.bash_profile

   在其中加入JAVA_HOME=<你的JDK目录路径>,

   然后再加入ANDROID_JAVA_HOME=$JAVA_HOME,

   然后使环境变量生效,

   . ~/.bash_profile

   再次检查JAVA_HOME以及ANDROID_JAVA_HOME环境变量,

   echo $JAVA_HOME

   echo $ANDROID_JAVA_HOME

B. 编译Android

   cd ~/Android

   make

   这 一步编译出system.img、userdata.img、ramdisk.img三个镜像,位于out/target/product /generic目录下。但是这里并没有编译最关键的kernel,如果需要编译kernel,可以根据自己的硬件环境配置kernel,然后编译生成。

   如果需要编译sdk,运行make sdk(jdk6.0 update 10编译会出错)。

C. 运行emulator

   我们这里使用已经编译好的模拟器kernel镜像,即kernel-qemu,位于~/Android/prebuilt/android-arm/kernel目录下,然后运行模拟器。

   cd ~/Android/out/host/linux-x86/bin    (进入模拟器程序所在目录)

   ./emulator -system ~/Android/out/target/product/generic -kernel ~/Android/prebuilt/android-arm/kernel/kernel-qemu

   其中-system指定system.img、userdata.img和ramdisk.img所在目录,-kernel指定加载的内核。

D. 开发环境

   在Android目录下运行. build/envsetup.sh,然后就会多出几个可用的命令,可以使用help进行查看。

   在修改了某一个模块以后,可以使用mmm <目录>来重新编译所有在<目录>中的所有模块,使用mm编译当前目录中的所有模块。

   在修改了Android系统以后,可以使用make snod重新生成system.img。

阅读(1346) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~