2.4 编译源代码
编译Android源代码的方法非常简单,只需使用Android源代码根目录下的Makefile,执行make命令即可实现。当然在编译Android源代码之前,首先要确定已经完成同步工作。进入Android源代码目录使用make命令进行编译,使用此命令的格式如下所示:

$: cd ~/Android5.0(这里的“Android就是我们下载源代码的保存目录)
$: make

编译Android源代码可以得到“~/project/android/cupcake/out”目录,笔者的截图界面如图2-15所示。

整个编译过程也是非常漫长,需要读者耐心等待。在本节的内容中,将详细讲解编译并在模拟器中运行Android 5.0源代码的方法。

2.4.1 搭建编译环境
在编译Android源代码之前,需要先进行环境搭建工作。在Android官方网站http://source.android.com/source/initializing.html提供了编译源代码的教程,如图2-16所示。




Android 源码编译替换testkey android源代码编译过程详解_Android



在接下来的内容中,以Ubuntu系统为例讲解搭建编译环境以及编译Android源代码的方法。具体流程如下所示。

(1)安装JDK,编译Android 5.0的源代码需要JDK 1.7,下载jdk-7u22-linux-i586.bin后进行安装,对应命令如下:

$ cd /usr
$ mkdir java
$ cd java
$ sudo cp jdk-7u22-linux-i586.bin所在目录 ./
$ sudo chmod 755 jdk-7u22-linux-i586.bin
$ sudo sh jdk-7u22-linux-i586.bin

(2)设置JDK环境变量,将如下环境变量添加到主文件夹目录下的.bashrc文件中,然后用source命令使其生效,加入的环境变量代码如下:

export JAVA_HOME=/usr/java/jdk_27
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/bin/tools.jar:$JRE_HOME/bin
export ANDROID_JAVA_HOME=$JAVA_HOME

对于安装好的JDK,并且在添加环境变量之后,可以输入并执行命令“java –version”来查看JDK的版本。

(3)然后安装需要的编译工具,对于Linux 10.04系统来说,只需要安装如下所示的软件工具即可,在安装前保持电脑正常连接网络:

sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \

然后使用下面的命令实现一个软链接文件:

sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so

然后安装Linux 11.10系统需要的特别工具:

sudo apt-get install libx11-dev:i386

(4)开始设置高速缓存,目的是加快编译速度。对于配置不是很高的电脑来说,最好进行这个设置,这样可以节约很多时间。设置方法是先用vi或者gedit软件打开宿主目录下的“.bashrc”文件,然后在文件的最后添加如下值:

export USE_CCACHE=1
然后在保存后退出,重新登录系统以使设置生效,如图2-17所示。


Android 源码编译替换testkey android源代码编译过程详解_Android_02



在终端中切换到源代码根目录中,然后执行下面的命令设置ccache的大小为50GB。

prebuilts/misc/linux-x86/ccache/ccache -M

其实ccache就是一个执行文件,后面的-M和50GB是传递给ccache的参数,表示设置50GB的缓存空间,这个大小可以根据我们的时间需要来修改。

(5)运行如下所示的命令,导入编译Android源代码所需的环境变量和其他参数:

source build/envsetup.sh

要想了解具体添加了哪些环境变量等,可以打开图2-18中方框中对应的文件。

(6)运行lunch命令选择编译目标,运行lunch命令后会出现一些已经预置好的项目。在此输入对应的数字,然后回车选择编译目标对象,如图2-19所示。


Android 源码编译替换testkey android源代码编译过程详解_移动开发_03



运行lunch命令并选择好编译目标后,会出现如图2-20所示的提示信息。

(7)接下来开始步入真正的编译阶段了,运行如下所示的命令进行编译:

make -j16

因为笔者电脑的CPU是i7 4770,所以,在此使用16,如图2-21所示。


Android 源码编译替换testkey android源代码编译过程详解_java_04



编译过程比较慢,因为电脑配置的问题可能需要几个小时的漫长等待。编译成功后会弹出如图2-22所示的提示信息。

这样在编译完成后,可以在源代码中的“out/target/product/generic/”目录生成对应固件等文件,如图2-23所示。


Android 源码编译替换testkey android源代码编译过程详解_Android_05



2.4.2 在模拟器中运行
在模拟器中运行的步骤就比较简单了,只需在终端中执行下面的命令即可:

emulator
运行成功后的效果如图2-24所示。


Android 源码编译替换testkey android源代码编译过程详解_Android_06