2.1.2 源代码获取

Android的源代码是用Git[1]来进行管理的。Git是一款高效的源码管理工具,关于它的特点和具体指令,可以参见其官网。为了更好地进行源代码管理操作,Android基于Git封装了一个工具,叫做Repo。它隐藏了较为繁琐的Git指令细节,帮助开发者更方便地进行源码的同步。

按照以下步骤,可以下载并配置好Repo:


$cd~

$mkdir bin

$curl http://android.git.kernel.org/repo>~/bin/repo

$chmod a+x~/bin/repo


有了Repo,就可以开始下载源代码了。首先,需要建立一个Android工作目录(本书的后续内容,均以粗体的MY_ANDROID代表该工作目录):


$mkdir MY_ANDROID

$cd MY_ANDROID


如果是想同步版本库中最新的源代码,可以按照如下指令,在Android工作目录MY_ANDROID中初始化版本库:


$repo init-u git://android.git.kernel.org/platform/manifest.git


类似地,如果期望同步特定分支上的源代码,可以通过-b参数来指定分支的版本或别名,比如,同步cupcake(即Android 1.6)分支上的最新代码,可如下执行:


$repo init-u git://android.git.kernel.org/platform/manifest.git-b cupcake


在初始化版本库的工作完成以后,就可以使用同步指令,将源代码同步更新到本地:


$repo sync


如果是首次在工作目录下调用该指令,它会将源码库中指定版本的文件完整地下载到本地,而日后再执行该指令,则会和本地已有文件做比较,将更新的部分同步并进行合并。

Android的源代码大小约为2GB,为了给后续工作留出充足够的余量,建议最好准备6~10GB空间,以及1.5GB的内存空间。在硬盘容量动辄上百GB的今天,这个需求并不算太过分。

通过上述方法获取到的源代码,包含了Android应用层、框架层、运行时和底层类库的所有代码,可以用来编译出运行在模拟器上的Android ROM,以及相关的开发工具。但是,这份源代码并不能编译出可以在真实设备上运行的ROM,因为还缺少了Linux操作系统层和硬件抽象层相关的代码。如果你希望为自己或他人的手机打造一份印有自己Logo的Android ROM,那么需要将这些缺失的内容(可能是源码,也可能是已编译好的类库和资源)同步至本地[2]

包含在Android源代码库中的其他所需代码,可以通过修改工作目录MY_ANDROID下的.repo/local_manifest.xml来让源码管理工具帮你同步。比如,添加Linux的核心代码以及厂商提供的一些开源的设备相关模块,可以将local_manifest.xml修改如下[3]


<?xml version="1.0"encoding="UTF-8"?>

<manifest>

<project path="kernel"name="kernel/msm"revision="refs/heads/android-msm-2.6.29-donut"/>

<project path="vendor/htc/common-open"name="platform/vendor/htc/common-open"revision="master"/>

<project path="vendor/htc/dream-open"name="platform/vendor/htc/dream-open"revision="master"/>

<project path="vendor/htc/prebuilt-open"name="platform/vendor/htc/prebuilt-open"revision="master"/>

<project path="vendor/htc/sapphire-open"name="platform/vendor/htc/sapphire-open"revision="master"/>

<project path="vendor/qcom/android-open"name="platform/vendor/qcom/android-open"revision="master"/>

<project path="vendor/qcom/proprietary-open"name="platform/vendor/qcom/proprietary-open"revision="master"/>

<project path="vendor/pv-open"name="platform/vendor/pv-open"revision="master"/>

<project path="vendor/aosp"name="platform/vendor/aosp"revision="master"/>

<project path="hardware/htc/dream"name="platform/hardware/htc/dream"revision="master"/>

</manifest>


其中,project单元中的path属性指明了同步到本地的文件夹位置;name属性指的是源代码位于源码库(http://android.git.kernel.org/)的相对路径;revision则对应源码库中具体版本的信息。通过这样的xml配置文件,你可以将高通芯片的Linux核心代码同步到本地的kernel目录,并把厂商硬件相关的代码同步至vendor或者hardware文件夹中。

[1]Git的官网是:http://git-scm.com/。

[2]这些内容可以从Android的源码库(http://android.git.kernel.org/)或者设备厂商的网站(比如HTC的手机可以查看http://developer.htc.com/adp.html)中找到;如果没有,就可能需要自己动手来编写了。

[3]请参考:http://code.google.com/p/android-development-environment/wiki/EclaironADP1andADP2。