Android之使用Ubuntu 8.10编译
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.git.kernel.org/platform/manifest.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文件中,有很多形
如要的project_path。
因为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
B.1 make
这 一步编译出system.img、userdata.img、ramdisk.img三个镜像,位于
out/target/product /generic目录下。但是这里并没有编译最关键的kernel,如
果需要编译kernel,可以根据自己的硬件环境配置kernel,然后编译生成。
B.2 如果需要编译sdk,运行make sdk(jdk6.0 update 10编译会出错)。
使用jdk5.0进行编译sdk可以顺利通过,但是如果已经安装了jdk6,需要执行如
下操作:
sudo update-alternatives --config javadoc
现有 2 个可选项,它们都提供了“javadoc”<
选择 可选项
-----------------------------------------------
+ 1 /usr/lib/jvm/java-6-sun/bin/javadoc
* 2 /usr/lib/jvm/java-1.5.0-sun/bin/javadoc
要维持缺省值[*],按回车键,或者键入选择的编号:
选择2即可
B.3 编译内核(master模拟器内核)
编译器在/home/lgliu/mydroid/prebuilt/linux-x86/toolchain下
% git clone git://android.kernel.org/kernel/common.git kernel
% cd kernel
% export ARCH=arm
% export CROSS_COMPILE=arm-eabi-
% make goldfish_defconfig
% make
B.4 编译内核(cupcake分支)
mkdir ~/android_root ; cd ~/android_root
$ repo init -u git://android.git.kernel.org/platform/manifest.git
-b cupcake
$ repo sync
You won't find any goldfish (code name for the emulator
hardware
platform) files in the synced 2.6.27 kernel source tree. So do
this:
$ cd kernel
$ git checkout --track korg/android-goldfish-2.6.27 -b goldfish
Now you'll find a number of goldfish files on that branch, and
you can
make the kernel like so:
$ cd ~/android_root
$ cd kernel
$ export ARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ make goldfish_defconfig
# you now git checkout --track korg/android-goldfish-2.6.27 -b
goldfish have a .config file
$ make
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
指定加载的内核。
对于cupcake版本,需要首先创建avd设备,才能使用。
到
~/android-cupcake/out/host/linux-x86/sdk/android-sdk_eng.lgliu_linux-x86/tools目录运行./android,注意一定是如下目录,
不是~/android-cupcake/out/host/linux-x86/bin目录,否则会有问
题!!!!!
./android create avd -t 1 -n newavd
D. 开发环境
在Android目录下运行. build/envsetup.sh,然后就会多出几个可用的命令,
可以使用help进行查看。
在修改了某一个模块以后,可以使用mmm <目录>来重新编译所有在<目录>中的
所有模块,使用mm编译当前目录中的所有模块。
在修改了Android系统以后,可以使用make snod重新生成system.img。
阅读(827) | 评论(0) | 转发(0) |