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覆盖掉默认的清单。