25.4 清单库和清单文件

执行完repo init之后,工作目录内空空如也。实际上有一个.repo目录。在该目录下除了一个包含repo实现的repo库克隆外,就是manifest库的克隆,以及一个符号链接,链接到清单库中的default.xml文件。


$ls-lF.repo/

drwxr-xr-x 3 jiangxin jiangxin 4096 2010-10-11 18:57 manifests/

drwxr-xr-x 8 jiangxin jiangxin 4096 2010-10-11 10:08 manifests.git/

lrwxrwxrwx 1 jiangxin jiangxin 21 2010-10-11 10:07 manifest.xml->

manifests/default.xml

drwxr-xr-x 7 jiangxin jiangxin 4096 2010-10-11 10:07 repo/


在工作目录下的.repo/manifest.xml文件就是Android项目的众多版本库的清单文件。repo命令的操作都要参考这个清单文件。

打开清单文件会看到如下内容:


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

2 <manifest>

3 <remote name="korg"

4 fetch="git://android.git.kernel.org/"

5 review="review.source.android.com"/>

7

6 <default revision="master"

remote="korg"/>

8

9 <project path="build" name="platform/build">

10 <copyfile src="core/root.mk" dest="Makefile"/>

11 </project>

12

13 <project path="bionic" name="platform/bionic"/>

181 </manifest>


这个文件不太复杂,是吗?

这个XML的顶级元素是manifest,见第2行和第181行。

第3行通过一个remote元素,定义了名为korg(kernel.org缩写)的远程版本库,其Git库的基址为git://android.git.kernel.org/。还定义了代码审核服务器的地址review.source.android.com。还可以定义更多的remote元素,这里只定义了一个。

第6行用于设置各个项目默认的远程版本库(remote)为korg,默认的分支为master。当然各个项目(project元素)可以定义自己的remote和revision覆盖该默认配置。

第9行定义了一个项目,该项目的远程版本库相对路径为:platform/build,在工作区克隆的位置为:build。

第10行,即project元素的子元素copyfile,定义了项目克隆后的一个附加动作:从core/root.mk拷贝文件至Makefile。

第13行后续的100多行定义了其他160个项目,都是采用类似的project元素语法。name参数定义远程版本库的相对路径,path参数定义克隆到本地工作区的路径。

还可以出现manifest-server元素,其url属性定义了通过XMLRPC提供实时更新清单的服务器URL。只有当执行repo sync—smart-sync的时候才会检查该值,并用动态获取的manifest覆盖掉默认的清单。