Google 采用版本控制工具git来管理Android源码,要获取各种版本的android源码必须要从谷歌仓库中在线获取,google也为此开发了一种工具repo,它是一种采用python编写的脚本,主要功能为从谷歌仓库下载android源码。
具体的获取过程为,环境为ubuntu10.4:
- 安装GIT工具
Google采用分布式版本控制系统GIT来管理Android源代码,具体的介绍大家可以搜索一下,使用如下命令来安装此工具。
sudo apt-get install git-core gnupg
- 安装JDK
Android系统的上层APP均是采用JAVA来开发的,以至于在编译Android源码的过程中也需要此JAVA SDK,一般的ubuntu系统没有自带JDK,因此我们需要手动安装JDK,Android2.3需要JDK6,低版本的Android可能需要低版本的JDK5,获取和安装命令如下:
sudo apt-get install sun-java6-jre sun-java6-plugin
sudo apt-get install sun-java6-jdk
- 安装Android需要的其他包,获取和安装命令如下:
sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl valgrind
- 安装获取源码的repo脚本命令工具,由于其只是一个脚本文件,因此只需要获取,不需要安装,命令为:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
- 获取Android源码,命令为:
repo init -u https://android.googlesource.com/platform/manifest
上面这种方式获取的是最新的Android源码,比如我写本文的时候,获取的是Android4的源码,也可以获取指定版本的源码,命令为:
repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.3_r1
上面这两种方式都只是和google提供的Android源码建立连接,并没有下载,要想下载想要的代码,命令为:
repo sync
下载时间很长,根据网络情况和电脑配置而定,但是它支持断点续传。
2. 编译Android源码
在编译Android源码之前,需要修改几个文件
1. 因为Android源码默认是在64位PC机上编译的,因此需要修改一下几个文件:
/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变量,进行修改:
# LOCAL_CFLAGS += -m64
# LOCAL_LDFLAGS += -m64
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
2. 修改build/core目录下的main.mk文件
#ifneq (64,$(findstring 64,$(build_arch)))
ifneq (i686,$(findstring i686,$(build_arch)))
3. 在Android源码目录的根目录下执行命令make,如果没有什么错误,会产生四个文件:
out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
out/target/product/generic/system.img
out/target/product/generic/ramdisk.img
out/target/product/generic/userdata.img
3. 安装编译好的镜像到模拟器上
1. 修改环境变量,将emulator命令添加到环境变量里,或者直接进入到命令所在文件夹out/host/linux-x86/bin直接执行命令。
2. 运行模拟器,命令为:
Emulator ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
由于Android源码没有包含linux内核,模拟器使用的内核是Android源码自带的内核kernel-qemu,位于: prebuilt/android-arm/kernel/kernel-qemu
最后启动的效果如图: