分类: 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
因为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。