本文是参照 http://blog.csdn.net/luoshengyang/article/details/6559955 步骤进行的,但由于该博客中有些内容地址不存在,结合自己的实践写的一篇文章。在这里感谢罗老师在他博客里详细的讲解,让我初次编译android源代码少走了不少弯路。
一.环境准备
1. 安装ubuntu12.04系统
2. 安装Git工具。Android源代码采用Git工具来管理,与SVN相比,这是一种分布式的源代码管理工具,而SVN是集中式的源代码管理工具。要安装Git工具,在Ubuntu上执行以下命令即可:
USER-NAME@MACHINE-NAME:~$ sudo apt-get install git-core gnupg
3.安装Java SDK。在Ubuntu上执行以下命令:
USER-NAME@MACHINE-NAME:~$
USER-NAME@MACHINE-NAME:~$
sudo apt-get update
USER-NAME@MACHINE-NAME:~$
sudo apt-get install sun-java6-jre sun-java6-plugin
USER-NAME@MACHINE-NAME:~$
sudo apt-get install sun-java6-jdk
4.依赖的其它包。在Ubuntu上执行以下命令:
USER-NAME@MACHINE-NAME:~$ sudo apt-get install flex bisongperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
5.调试工具。在Ubuntu上执行以下命令:
USER-NAME@MACHINE-NAME:~$ sudo apt-get install valgrind
二.下载android源代码2.3
1.创建一个目录
USER-NAME@MACHINE-NAME:~$ mkdir android
2切换到android目录
USER-NAME@MACHINE-NAME:~/android$ cd android
3. 在android目录下创建bin目录
USER-NAME@MACHINE-NAME:~/android$ mkdir bin
4.下载repo工具
USER-NAME@MACHINE-NAME:~/android$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > bin/repo
5.赋予repo使用权限
USER-NAME@MACHINE-NAME:~/android$ sudo chmod 777 bin/repo
6.用repo获取android2.3版本源代码
USER-NAME@MACHINE-NAME:~/android$ bin/repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.7_r1
-----------------------此branch可以在http://source.android.com/source/index.html网页中的 Build Numbers页面中查到。
7.将代码同步到本地
USER-NAME@MACHINE-NAME:~/android$ bin/repo sync
下载时间比较长,在android目录下可以看到同步的源代码。
三.编译android源码
编译前需要修改gcc版本,因为ubuntu12.04采用gcc4.6版本,而android源代码需要gcc低版本编译,在这里使用gcc4.4版本
1.下载gcc-4.4和g++-4.4
USER-NAME@MACHINE-NAME:~/android$ apt-get install gcc-4.4 g++-4.4
2.进入/usr/bin
USER-NAME@MACHINE-NAME:~/android$ cd /usr/bin
3. 建个软连接
USER-NAME@MACHINE-NAME:/usr/bin$ ln -s gcc-4.4 gcc
USER-NAME@MACHINE-NAME:/usr/bin$ln -s g++-4.4 g++
4.回到android目录
USER-NAME@MACHINE-NAME:/usr/bin$ cd ~/android
5.在android目录下执行以下命令:
USER-NAME@MACHINE-NAME:~/Android$ make
第一次编译要等待比较久的时间
也许编译会有错误,我很幸运,没有碰到该问题
四、安装编译好的Android镜像到模拟器上。
1.设置环境变量:
USER-NAME@MACHINE-NAME:~/android$ export PATH=$PATH:~/android/out/host/linux-x86/bin
USER-NAME@MACHINE-NAME:~/android$ exportANDROID_PRODUCT_OUT=~/android/out/target/product/generic
其中,~/android/out/host/linux-x86/bin有我们要执行的emulator命令,而~/android/out/target/product/generic是android镜像存放目录,下面执行emulator命令时会用到。
2.运行模拟器。
USER-NAME@MACHINE-NAME:~/android$ emulator
模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。
当然,我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:
USER-NAME@MACHINE-NAME:~/android$ emulator -kernel./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic-system system.img -data userdata.img -ramdisk ramdisk.img