本次编译过程主要参考官方文档(http://source.Android.com/download)
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-java5-jre sun-java5-plugin sun-java5-fonts sun-java5-jdk
- 如果安装失败,可以去JAVA官网下载JDK1.5的安装包(http://java.sun.com/javase/downloads/5u22/jdk
)2、设置环境变量 (如果是安装JAVA官网的JDK,可以跳过了)
vim ~/.bashrc
在.bashrc中新增或整合PATH变量,如下
- #java 程序开发/运行的一些环境变量
- JAVA_HOME=/usr/lib/jvm/java-5-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源码,并得到~/project/Android/cupcake/out 目录
进入Android源码目录:
make
这一过程很久(2个多小时)
4、在模拟器上运行编译好Android
Android SDK的emulator程序在Android-sdk-linux_x86-1.0_r2/tools/下,emulator是需要加载一些image的,默认加载Android-sdk-linux_x86-1.0_r2/tools/lib/images下的kernel-qemu(内核) ramdisk.img system.img userdata.img
编译好Android之后,emulator在~/project/Android/cupcake/out/host/linux-x86/bin下, ramdisk.img system.img userdata.img则在~/project/Android/cupcake/out/target/product/generic下
cd ~/project/Android/cupcake/out/host/linux-x86/bin
增加环境变量
vim ~/.bashrc
在.bashrc中新增环境变量,如下
直接make Android源码时,并没有make linux kernel。因此是在运行模拟器,所以不用编译 linux kernel。如果要移值Android,或增删驱动,则需要编译 linux kernel
linux kernel的编译将在以后的文章中介绍。
6、编译模块
Android中的一个应用程序可以单独编译,编译后要重新生成system.img
在源码目录下执行
. build/envsetup.sh (.后面有空格)
就多出一些命令:
- - croot: Changes directory to the top of the tree.
- - m: Makes from the top of the tree.
- - mm: Builds all of the modules in the current directory.
- - mmm: Builds all of the modules in the supplied directories.
- - cgrep: Greps on all local C/C++ files.
- - jgrep: Greps on all local Java files.
- - resgrep: Greps on all local res/*.xml files.
- - godir: Go to the directory containing a file.
可以加—help查看用法
我们可以使用mmm来编译指定目录的模块,如编译联系人:
mmm packages/apps/Contacts/
编完之后生成两个文件:
- out/target/product/generic/data/app/ContactsTests.apk
- out/target/product/generic/system/app/ Contacts.apk
可以使用make snod重新生成system.img
再运行模拟器
make sdk
7、编译SDK(我是使用JAVA JDk 安装包)
- #java 程序开发/运行的一些环境变量
- export Android_PRODUCT_OUT=~/project/Android/cupcake2/out/target/product/generic
- Android_PRODUCT_OUT_BIN=~/project/Android/cupcake2/out/host/linux-x86/bin
- export PATH=${PATH}:${Android_PRODUCT_OUT_BIN};
最后,同步这些变化:
- source ~/.bashrc
- emulator -image system.img -data userdata.img -ramdisk ramdisk.img
最后进入Android桌面,就说明成功了。
out/host/linux-x86/bin下生成许多有用工具(包括Android SDK/tools的所有工具),因此,可以把eclipse中Android SDK的路径指定到out/host/linux-x86/bin进行开发
补充:如果在windows下使用SDK,则需要在windows中转变原有的SDK数据。详细请查考。
http://blog.youkuaiyun.com/happyhell/archive/2010/07/13/5732062.aspx
8、编译linux kernel --- 正在进行中。