最近看了一些资料,学习了android系统源码的编译。在这里做一下记录。
我的编译环境:ubuntu11.04, jdk1.6, 2.1GHz主频, 2G内存, 32位机
先上图吧,这是我编译的系统,用模拟器运行起来的效果:
1:安装必要的工具:
安装git工具:
在命令行执行如下命令
sudo apt-get install git-core gnupg
安装jdk,这个就百度吧。
2:下载源代码:
首先建立一个bin目录,来放置即将下载的repo工具:
mkdir ~/bin
下载repo脚本,在ubuntu执行命令:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
经过这两条命令在你的~/bin/目录下面已经有了一个名为“repo”的脚本文件,并且该文件已经有了可执行的权限。
新建一个目录来存放源代码:
mkdir android
cd android
下载服务器上最新的源代码命令
repo init -u https://android.googlesource.com/platform/manifest
如果不想下载最新的源代码就加上一个参数 -b,比如下载2.3.1的系统源码
repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.1_r1
执行这条命令之后,在android文件夹下面就有了一个.repo文件夹,按Ctrl+h键可以看到。
开始下载,执行命令:
repo sync
注意:下载源代码的时间有点久,因为源代码很大,我下载的是2.3.1的,总共7个多G,里面包含了.repo文件夹中的内容。期间可能会出现断网,或者你等不了那么就想下一次接着下载,可以直接关掉。下一次你准备下载的时候就按照之前的步骤将repo工具路径加入环境变量中,在android目录再次执行命令
repo sync
下载完源代码后你的目录应该是这样:
3:编译源代码:
因为android2.2以后的源码官网都建议使用64位机来编译,这里需要修改一下它的默认规则为32位:
1)修改build/core目录下的main.mk文件:
ifeq ($(BUILD_OS),linux)
build_arch := $(shell uname -m)
#Change the following line for building on a 32-bit system.
#ifneq (64,$(findstring 64,$(build_arch)))
ifneq (i686,$(findstring i686,$(build_arch)))
$(warning ************************************************************)
$(warning You are attempting to build on a 32-bit system.)
$(warning Only 64-bit build environments are supported beyond froyo/2.2.)
2)找到下列文件:
/external/clearsilver/cgi/Android.mk
/external/clearsilver/cs/Android.mk
/external/clearsilver/java-jni/Android.mk
/external/clearsilver/util/Android.mk
修改LOCAL_CFLAGS和LOCAL_LDFLAGS变量:
# This forces a 64-bit build for Java6
# Change the following two lines for building on a 32-bit system.
# LOCAL_CFLAGS += -m64
# LOCAL_LDFLAGS += -m64
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
编译:
$~android/make
第一次编译的时间有点长,如果顺利的话等3、4个小时就编译成功了。其中可能出现一些小问题,稍微百度一下就可以解决掉的。
4:运行编译后的镜像:
设置镜像和emulator的环境变量
export PATH=$PATH:~/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic
运行:
emulator
参考资料:
http://blog.csdn.net/luoshengyang/article/details/6559955
http://source.android.com/source/downloading.html