深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境

Android的源码开发可以在MacOS上或Ubuntu系统上,目前不支持在Windows下进行源码开发,在Ubuntu上建立开发环境的步骤如下:

  • 建立Linux编译环境
  • 安装JDK
  • 安装编译必备程序包
  • 下载Android源码及Linux内核

注:本书中使用的是针对Android2.3开发环境,并没有使用最新Android版本,原因其一是,Android版本升级比较频繁,其二Android版本的升级对我们学习Android底层没有很大的影响,其三Android随着版本的升级,源码体积和编译时间也在成倍增加会大大降低学习效率,如果读者想下载使用最新Android版本,请查看Android的官方网站:

Android源码开发:http://source.android.com/source/initializing.html

2.2.1建立Ubuntu编译环境

Android的编译环境的最低要求,随着Android版本的升级也发生了变化:

  • 对于Gingerbread2.3.x版本及其以上版本,需要安装64Ubuntu,对于2.3.x以下版本可以使用32Ubuntu

注:这只是Android官方给出的建议,在简单修改AndroidMakefile后,其实在32位系统上也可以编译2.3.x以后版本。

  • Ubuntu也可以安装在虚拟机软件中,对于Android2.3.x编译环境,虚拟机分配内存和交换分区总和最少要2GB,磁盘空间最少10GB,如果要编译多个不同版本Android磁盘空间要求更多。
  •  为了能够正确下载和编译Android源码,还需要安装以下程序包:

  1.  Python 2.6 -- 2.7:Python是一个非常易学的面向对象的脚本语言,在Android的编译过程中会使用到该脚本解释器。
  2.  GNU Make 3.81 -- 3.82:Make工具用于管理和编译大型的源码项目,它通过Makefile来指定编译规则。
  3. JDK6Android源码中包含大量的Java源码,编译Java源码要使用JDK里的编译工具,对于Gingerbread2.3.x及其以上版本要使用JDK6编译,对于2.3.x以下版本要安装JDK5
  4.  Git 1.7:GitLinus Torvalds(也是Linux内核的编写者)开发一个非常优秀的分布式项目版本控制系统,用于大型项目的维护,如Linux内核源码和Android源码都是使用Git来管理的,我们用安装Git来下载Android的源码。

 

2.2.2 JDK安装

虽然我们可以通过Ubuntuapt-get install命令下载JDK,但是JDK的源码经常会更新到新版本,我们也可以直接从SUN公司的网站上下载:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

如果Ubuntu安装的是32位版本的,选择Linux x86版本,如果Ubuntu64位的,那么应该选择Linux x64,如图x-x所示。

深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境

下载下来的文件是bin格式的二进制文件,将其拷贝到UbuntuHome目录下的android目录中(在本书中,默认Home目录下的android目录为我们的开发目录):

$ cp jdk-6u41-linux-i586.bin ~/android

注:jdk格式为:jdk-版本号更新号-平台名.bin,随着Jdk的更新更新可以不一样,不同的更新号不影响使用。

切换到Home目录下:

$ cd ~/android

添加上可执行权限:

$ chmod a+x jdk-6u41-linux-i586.bin

直接执行安装:

$ sudo ./jdk-6u41-linux-i586.bin

安装完之后,会发现在当前目录下有jdk1.6.0_41的目录,这个目录就是jdk的安装目录,我们要将Jdk添加到环境变量中去。

通过vi编译器打开Home目录下的.bashrc文件,该文件是bash终端的配置文件:

$vi ~/.bashrc

.bashrc配置文件的最后添加如下代码:

# set jdk PATH
export PATH=/home/linux/android/jdk1.6.0_41/bin:$PATH

上述代码是将jdk安装目录下的bin目录添加到PATH环境变量中,当每次启动BASH终端时,都会自动加载PATH变量。

添加完PATH变量后,保存退出vi编译器,通过下面的命令重新加载新配置文件,然后验证PATH环境变量是否设置正确:

$ source~/.bashrc
$ java-version
java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)

执行javac –version命令,如果打印出Java版本信息,说明我们的Jdk安装完毕。

2.2.2 安装Android编译工具

在编译Android源码里,Ubuntu系统要依赖一些工具包,如:libc6-dev是标准C库,libx11-dev:i386是开发x11界面的库和头文件包,GnuPG工具是用于加密或签名的工具包等。

安装必备工具包:

sudo apt-get install git-core gnupg flex bison gperfbuild-essential \  
zip curl libc6-dev libncurses5-dev:i386x11proto-core-dev \  
libx11-dev:i386 libreadline6-dev:i386libgl1-mesa-glx:i386 \  
libgl1-mesa-dev g++-multilib mingw32 tofrodos \  
python-markdown libxml2-utils xsltproc zlib1g-dev:i386  

2.2.3 下载Android源码

Ubuntu编译环境准备好之后,就可以下载Android源码了,Android的源码通过Git来管理,Android的网站上为我们准备好了一个repo脚本,repoGooglePython脚本写的调用git的一个脚本,主要是用来下载、管理Android项目的软件仓库。我们使用repo脚本可以下载指定版本的Android源码。

/home/linux/android创建Android源码下载目录:

$ cd /home/linux/android/
$ mkdirandroid_source
$ cd android_source

创建repo脚本的保存目录,保存到HOME目录下的bin目录中:

$ mkdir~/bin

~/bin目录添加到PATH环境变量中,方便运行:

$ PATH=~/bin:$PATH

通过curl工具从Android网站下载repo脚本:

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 

repo脚本添加上可执行权限:

$ chmod a+x ~/bin/repo

初始化repository本地代码仓库,准备访问Android源码仓库:

$ repo  init -u  https://android.googlesource.com/platform/manifest -b android-2.3.5_r1

注:repo init -u URL 用以在当前目录安装 repository ,会在当前目录创建一个目录 ".repo"  -u 参数指定一个URL,从这个URL 中取得repository 的 manifest.xml文件,manifest.xml文件内容是git管理的仓库的列表,也就是所有Android版本仓库代码信息。用 -b 参数来指定初始化某个Android版本分支。

 

这个时候,要保证您的Ubuntu能够上网,并且能正常连接到Android服务器,在初始化完repository后,会让你输入gmail邮箱及用户名验证,如图x-x所示

 深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境


同步下载Android2.3源码:

$ repo sync

这个过程比较漫长,根据网络环境不同,需要数小时或数十个小时。由于要连接国外服务器下载,可能会中断,我们可以编写如下脚本,来实现断线自动重新下载。

#!/bin/bash
PATH=~./bin:$PATH
repo init-u https://android.googlesource.com/a/platform/manifest-b android-2.3.5_r1
repo sync
while [ $? -ne 0]; do
echo“  **Error: sync failed, re-sync again”
sleep 5
repo sync
done

2.2.4 下载Linux内核源码

Google在开发Android系统的同时,使用qemu开发了一个Android模拟器,这大大降低了开发人员的开发成本,便于Android技术的推广。qemu是一个开源的模拟处理器软件,qemu模拟的是ARM926ej-SGoldfish处理器,如果开发人员在没有目标开发板的情况下,我们可以使用Goldfish模拟器作为开发对象。

通常Android Kernel内核的代码放在Android源码目录下的kernel目录下:

$ cd /home/linux/android/android_source
$ mkdir kernel

从Android的远程源码仓库下载源码:

$git clone http://android.googlesource.com/kernel/goldfish.git   

该过程大概需要几十分钟到几小时,等克隆完远程代码后,checkout出来想使用的分支:

$ git checkout remotes/origin/android-goldfish-2.6.29

 

2.2.4练习

1. 为什么Android的编译环境要安装Jdk?针对不同的Android版本是否对Jdk版本有不同要求?

2. 在安装JDK的时候为什么要设置环境变量?

3. 当执行repo脚本时,提示:Permisson denied的错误信息,这是为什么?

4. git工具是干什么?谁会用到git

5. 如果要下载新版本的Android源码,如何操作?


深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境,布布扣,bubuko.com

深入浅出 - Android系统移植与平台开发(四)- 搭建Linux编译环境

上一篇:Android编程心得-ListView子项点击无反应的解决办法


下一篇:Android源代码编译命令m/mm/mmm/make分析