Android 开发环境搭建以及编译

两种搭建编译环境的方式,一种方法是用户安装虚拟机,然后安装基础的Ubuntu12.04.2 系统,利用提供的工具和详细的使用步骤,搭建编译环境;另外一种方法是用户安装虚拟机,然后直接加载 “搭建好的Ubuntu 镜像”,用户只需要修改一下编译器的环境变量,就可以直接用来编译源码。

搭建环境的步骤:

1.1 安装基本软件

首先安装虚拟机“Vmware_Workstaion_wm”,然后使用虚拟机安装“Ubuntu12.04.2 初始系统”。虚拟机和Ubuntu 初始系统迅为电子在网盘提供下载。Ubuntu 的安装方法可以参考3.2 小节来安装Ubuntu12.04.2 原始系统。安装完成后进入Ubuntu 的终端,激活root 用户,具体操作如下:

在Ubuntu 命令行中,执行下面命令:sudo passwd root

接着在Ubuntu 的终端输入安装时的密码和新密码,Ubuntu 系统中密码默认是隐藏的。接着登录root 用户,具体操作如下:在Ubuntu 命令行中,执行下面命令:su root

接着输入密码,就可以登陆root 用户。后面所有的操作都需要在root 用户下面进行操作。然后在Ubuntu 安装软件vim 和ssh,具体操作如下:在Ubuntu 命令行中,执行下面命令:

apt-get install vim

apt-get install ssh

上面安装的ssh 软件,可以很方便在主机和虚拟机上传递文件,也可以通过远程终端控制Ubuntu 系统,这里推荐给大家使用。ssh 软件的使用参考3.3 小节。

1.2 安装编译组件

交叉编译工具

编译的时候需要用到交叉编译工具,我们提供的交叉编译工具是用户光盘“tool-chains”文件夹中的压缩包“arm-2009q3.tar.bz2”将交叉编译工具拷贝到Ubuntu12.04.2 系统的文件夹“usr”-->“local”-->“arm”中;然后在Ubuntu 系统中将压缩包解压到当前目录下。

修改交叉编译工具的路径(修改环境变量)

修改交叉编译工具路径,需要修改环境变量,具体操作如下:

在Ubuntu 命令行中,执行下面命令:

cd /root

vim .bashrc

然后在“.bashrc”文件中的最后一行添加如下信息:

export PATH=$PATH:/usr/local/arm/arm-2009q3/bin

修改完成后保存退出。

执行下列命令,更新环境变量

source .bashrc

最后,在Ubuntu 命令行中输入命令“arm”,然后按TAB 键,如果在命令行中能够看到arm 编译器的信息,就表明交叉编译工具安装成功。

1.3 安装库文件、JDK 以及降低GCC 版本

我们将库文件和JDK 的安装命令制作成了脚本文件,用户只要执行两个脚本就可以安装库文件和JDK。这两个脚本在用户光盘tools 文件夹下的压缩包“Android_JDK.tar.bz2”中,用户将压缩包拷贝到Ubuntu 系统中,解压压缩包会生成文件夹“Android_JDK”。

安装库文件和JDK

使用cd 命令,进入解压出来的“Android_JDK” -->“jdk6”文件夹,运行脚本文件“install-sun-java6.sh”。

具体操作如下:在Ubuntu 命令行中,执行下面的命令:

./install-sun-java6.sh

需要注意的是,这条命令执行完毕会耗时15 分钟以上。进入解压出来的文件夹“Android_JDK”中运行脚本“install-devel-packages.sh”,安装库文件,具体操作如下:在Ubuntu 命令行中,执行下面的命令:

./install-devel-packages.sh

需要注意的是,这条命令执行完毕会耗时40 分钟以上。

这里需要注意的是,上面个的脚本执行完毕的时候,注意一下有些库文件是不是没有安装。如果发现有库文件没有安装,有可能是网络不好或者下载源丢失。这个时候用户使用一下更新下载源的命令”apt-get update“,然后再执行一下上面的两个脚本。

降低GCC 版本

使用Ubuntu 编译Android4.0.3 需要用到Ubuntu 系统自带的GCC4.4.7 编译器,但是安装的Ubuntu12.04.2 版本,它的GCC 版本过高,所以这里需将要GCC 编译的版本降低到4.4.7。进入前面解压的文件夹“Android_JDK”中,会看到一个文本“update_gcc.txt”,打开文本“update_gcc.txt”后会看到里面有8 条命令,这8 条命令需要在Ubuntu 命令行中依次执行。在执行了这8 条命令之后,Ubuntu 系统就将gcc 的版本降低到4.4.7。需要注意的是,在执行这8 条命令时,只有第一条命令会耗时10 分钟左右,其它的都会很快完成,而且命令要依次执行,不能有遗漏。

2  Android4.0.3 镜像的编译

2.1 uboot 的编译

uboot 源码在用户光盘“Android 源码”文件夹中的压缩包“iTop4412_uboot_xxx_xxx.tar.gz”中。将压缩包拷贝到Ubuntu 系统中,解压后生成uboot源码文件夹“iTOP4412_uboot_xxx”。编译uboot 还需要将一个工具文件夹“CodeSign4SecureBoot”,这个工具文件夹在用户光盘“Android 源码”文件夹中。这个工具文件夹需要和前面解压出来的文件夹uboot 源码文件夹在同一目录下。

然后就可以进行编译了,进入uboot 源码文件夹,编译uboot,具体操作如下:

在Ubuntu 命令行中,执行下面的命令:

./create_uboot.sh

编译完成后,在uboot 源码文件夹中会生成uboot 的镜像文件“u-boot-iTop-4412.bin”。

2.2 Linux 内核的编译

Linux 内核源码在用户光盘“Android 源码”文件夹中的压缩包

“iTop4412_Kernel_3.0_xxx.tar.gz”中。拷贝源码压缩包到Ubuntu 系统中,解压后生成Linux内核源码文件夹“iTop4412_Kernel_3.0”。进入Linux 内核源码文件夹,编译Linux 内核,具体操作如下:

在Ubuntu 命令行中,执行下面命令:

make

编译完成后,在源码文件夹“arch”-->“arm”-->“boot”文件夹下会生成镜像文件“zImage”。

2.3 Android4.0.3 的编译

Android4.0.3 的源码在用户光盘“Android 源码”文件夹中的压缩包

“iTop4412_ICS_xxx.tar.gz”中。拷贝源码压缩包到Ubuntu 系统中,解压后生成Android4.0.3源码文件夹“iTop4412_ICS”。另外需要把上一小节内核源码“iTop4412_Kernel_3.0”和Android 源码“iTop4412_ICS”两个文件夹放在同一个目录下面。注意:要先编译内核“iTop4412_Kernel_3.0”,然后再编译“iTop4412_ICS”。编译Android4.0.3,具体操作如下:

进入文件夹“iTop4412_ICS”中,在Ubuntu 命令行中,执行下面命令:

./build_android.sh

编译完成后在文件夹“iTop4412_ICS”-->“out”-->“target”-->“product-->“smdk4x12”

中生成Android4.0.3 镜像文件“ranmdisk-uboot.img”和“System.img”。

这里需要注意的是:第一次编译耗时很长,与虚拟机给Ubuntu 分配的内存大小以及CPU的硬件配置有关系。如果只分配512 内存,编译时间可能达到4 小时以上,所以在机器允许的情况下可以尽量多的分配资源,以加快编译速度。另外,Android4.0.3 编译完成后,加上源码和编译的中间文件,差不多要占用18 个G 的空间。

另外还有一条命令,清除命令”make clobber“。执行清除命令后,很多中间文件都会被清除。如果清除了中间文件再次编译Android,中间文件需要再次编译,中间文件的编译会花费很长时间。一般情况下,不需要执行清除命令,如果不执行清除,再次编译Android,编译系统会智能识别出那些没有更改过的源文件,省去生成中间文件的过程,这样就会大大减少编译的时间。

3  Android4.2.2 环境的搭建及编译

3.1 uboot 的编译

Android4.2.2 系统的uboot 和Android4.0.3 系统的uboot 通用。

3.2 Linux3.5 内核的编译

因为编译linux-3.5 内核需要使用Android4.2.2 源码自带的交叉编译器,所以需要把Android4.2.2 的源码拷贝到Ubuntu 虚拟机。例如把Android4.2.2 的压缩包“android-4.2.2_r1_xxxxxxxx.tar.gz”(通过网盘下载得到,xxxxxxxx 是版本日期)拷贝到Ubuntu 虚拟机的“/home/topeet/android”目录下,使用命令“tar -xvf android-4.2.2_r1_ xxxxxxxx.tar.gz”解压Android4.2.2 源码,解压完成后得到“android-4.2.2_r1”文件夹。接下来把Android4.2.2 的内核压缩包“iTOP-4412_Kernel-3.5_xxxxxxxx.tar.gz”(通过网盘下载得到,xxxxxxxx 是内核的版本日期)拷贝到Ubuntu 系统中,使用“tar -xvfiTOP-4412_Kernel-3.5_ xxxxxxxx.tar.gz”解压这个压缩包,然后生成Linux 内核源码文件夹“linux-3.5”。然后使用“cd linux-3.5”命令进入Linux 内核源码文件夹,在“linux-3.5”目录下找到“Makefile”文件,使用“vi Makefile”命令打开这个文件,然后找到包含以下内容的行:

“CROSS_COMPILE ?=/home/cym/exynos4412/4.2/android4.2.2_JLB_PC4_CYIT/pre

builts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-”修改成前面Android4.2.2 所存放的目录:“CROSS_COMPILE ?=/home/topeet/android/android-4.2.2_r1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-”这里是指定下交叉编译器的路径,修改完成后退出并保存Makefile 文件。接下来开始编译Linux 内核,在“linux-3.5”目录执行下面命令开始编译内核:

make

编译完成后,在源码文件夹“arch”-->“arm”-->“boot”文件夹下会生成镜像文件“zImage”。

3.3 Android4.2.2 的编译

在5.4.2 小节里面已经把Android4.2.2 代码拷贝到Ubuntu 系统下,并解压生成了

“android-4.2.2_r1”文件夹,然后使用“#cd android-4.2.2_r1”命令进入到Android4.2.2

的源码目录里面,输入下面的命令开始编译Android4.2.2:

./create.sh

编译完成后会在当前目录的“out/target/product/smdk4412”下面生成镜像文件:

ramdisk-uboot.img

system.img

4  Android4.4.4 环境的搭建和编译

Android4.4.4 的编译环境和Android4.0.3 的编译环境一模一样。uboot 以及内核版本也是一样的,用户如果编译过了Android4.0.3,那么Android4.4.4 将会很容易的编译。烧写方法和Android4.0.3 的完全一样。用户可以在网盘下载到Android4.4 的源码压缩包。解压后可以得到Android4.4.4 和Kernel 的源码。

4.1 uboot 的编译

Android4.2.2 的uboot 的编译方法,与Android4.0.3 一样。

4.2 Linux 内核的编译

Android4.4.4 的内核使用的版本是3.0.15,与Android4.0.3 的内核版本是一样的。解压后,得到文件夹“iTop4412_Kernel_3.0”,进入该文件夹,如下图所示。

编译器也是使用的“arm-2009q3”。如果在环境变量中,默认不是该编译器,那么则需要如下图所示修改一下,修改完之后记得使用命令“source .bashrc”更新环境变量。

然后使用“make”命令编译内核。如下图,编译完成。

在“arch/arm/boot”文件夹中生成镜像“zImage”。

4.3 Android4.4.4 的编译

用户使用迅为电子提供的搭建好的编译环境,如果能够编译通过Android4.0.3,那么Android4.4.4 的编译就很简单了。首先要将对应的内核文件和Android 文件解压到同一级目录,如下图,蓝框中分别是内核以及Android 源码文件夹。

编译Android4.4.4,还缺少一个“javap”命令,如下图所示,使用命令“update-alternatives --install /usr/bin/javap javap usr/lib/jvm/jdk1.6.0_43/bin/javap

300”更新一下。

然后进入Android4.4.4 源码解压后得到文件夹“iTop4412_KK4.4”中,使用命令“./build_android.sh”,运行一键编译脚本,开始编译Android4.4.4。

如下图所示,编译完成。在文件夹“iTop4412_KK4.4/out/target/product/smdk4x12”中,生成镜像“ramdisk.img”和“system.img”。

这里还需要注意的是,Android4.4.4 源码需要占用较大的空间,用户需要确认有足够的空间才能够成功编译。Android4.0.3 编译完成后总共大约占用18G 的空间,Android4.4.4 编译完成后总共占用大约36G 的空间,如下图。

用户完全按照步骤编译错误,可以使用“df -l”查看一下盘符剩余空间还剩下多少,如下图所示,如果是已使用100%,则是空间不足。