1.3.2 下载Android上层系统源代码

Android用repo和git管理源代码。

git[1]是Linux之父Linus Torvalds为了管理Linux内核开发而开发的一个开放源码的分布式版本管理软件,它与SVN、CVS这样的集中式版本管理软件有很大不同。在集中式版本管理软件中多个客户端共享一个仓库(repository),而在git这样的分布式版本管理软件中,每一个客户端都包含一个完整仓库,客户端可以离线操作,本地提交可以稍后再提交到服务器上。

Android是由kernel、dalvik、bionic、prebuilt、frameworks等多个git库组成,为了方便使用,Android项目提供了一个名为repo的Python的脚本来统一管理这些git仓库。

Android源代码分成两部分,其中Kernel部分需要单独下载。这里先讲解上层系统源码的下载流程。这部分代码非常庞大,下载时间需要数小时以上。

步骤1 建立repo工作目录。


$mkdir~/bin(在主目录下创建bin目录,~在Ubuntu下代表主目录)

$PATH=~/bin:$PATH(将bin目录加入PATH环境变量)


步骤2 下载repo脚本。


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

(下载repo脚本到bin目录)

$chmod a+x~/bin/repo(给repo脚本可执行权限)


步骤3 建立Android源码目录。


$mkdir-p~/android/jellybean(建立jellybean目录存放Android 4.1源代码)

$cd~/android/jellybean(切换到jellybean目录下)


步骤4 初始化repo。


allong@android:~/android/jellybean$repo init

-u https://android.googlesource.com/platform/manifest-b android-4.1.1_r3


其中,-u为源码的git服务器地址,-b为源码的某个分支。

如果读者不清楚源码服务器上的分支情况,可以执行"git ls-remote"命令查看远程服务器都有哪些分支,然后选择较新分支下载。命令如下:


allong@android:~/android/jellybean$git ls-remote

-tags https://android.googlesource.com/platform/manifest


git ls-remote命令可以查看远程服务器上的branch列表。执行后显示内容如下:


1db98b3dedca5ab8b6eeefc5a7a98720e73fefdf refs/tags/android-2.3.7_r1

……

500aaaa87f49fddc1c7ca5066eebb2e03fdd14ac refs/tags/android-4.0.3_r1

……


可以通过tags后面的值判断有哪些branch可供下载。本书基于Android 4.1.1,所以传给-b参数的值取为"android-4.1.1_r3"。

注意 目录refs包含heads和tags两个子目录,其中存放了不同分支的头的索引,可以通过索引查看有哪些branch。如果没有指定-b,将下载Android主线(master默认分支)上最新版本的源代码,但这部分代码往往是不稳定的。

步骤5 下载Android源码。

初始化repo后,如果要下载Android源码,只需要进入源码根目录,然后在终端执行以下命令:


allong@android:~/android/jellybean$repo sync


这个过程将从服务器同步源码,需要花费几个小时的时间。可以通过"repo sync-j8"命令开启并行下载,8是开启8线程。读者可根据主机情况自行调整参数。

[1]如果要学习使用git,推荐被公认的经典著作《Git权威指南》(蒋鑫著,机械工业出版社)。