关于git-repo时manifest.xml的一些整理
在Android源码的下载和应用程序编程中,manifest.xml文件是非常重要的,是repo仓库的大管家,在里面定义着repo中可用的git项目。这里主要讲的是Android源码中的manifest.xml文件,应用程序中的manifest文件不是很了解,没有发言权。
今天就因为一个manifest.xml文件的问题,自己纠结了一天,总是不太明白为啥没有下载合适的工程,各种google,最后自己阅读了下.repo/manifest.xml文件,才发现可能是由于网页编辑人员的失误,将项目组的名称写错了,而自己又不太会看manifest.xml文件,所以怎么也找不出来问题。
下面以一个实际的例子来说明manifest.xml文件的结构(arndale-octa.xml),由于源文件非常大,只选取部分来进行说明:
<manifest>
<remote name="aosp" fetch="git://android.git.linaro.org/" review="review.android.git.linaro.org"/>
…
<default revision="refs/tags/android-4.4.2_r2" remote="aosp" sync-j="4"/>
<!-- Developer extras -->
<project path="packages/apps/AndroidTerm" name="platform/external/AndroidTerm" revision="linaro-master" groups="devel"/>
</manifest>
另外,google公司给出的文档manifest-format.txt中定义了XML文件的格式:
在<manifest>和</manifest>标记之间的是由repo脚本解释执行的一些命令。
Remote 定义了远程git的名称,fetch给定了该git项目的存放地址(URL)。Review定义了当使用命令’repo upload’上传更新后,审核代码的gerrit服务器的主机名。
Name:A short name uniqueto this manifest file。用来作为每个项目的.git/config的远程名称。
Project定义了一个新的项目
Path:定义了git仓库应该把远程源码存放到本地的位置
Name:git项目的名称
Revision:定义了在仓库中使用哪个分支或者tag,如果没有说明,则repo sync会使用由<default ../>标记的版本。
Groups:项目组的名称,有一些项目可能在被用在多个具体的实例中,所以将它们分组,通常有common,devel等组。
<default revision="refs/tags/android-4.4.2_r2" remote="aosp" sync-j="4"/>
在大多数情况下,可能规定一个默认的元素。它的Remote和revision属性被用于当项目没有指定自己的remote和revision属性时。
Revision属性:git分支的名称。(例如master或者refs/heads/master)。
当我们从google网站上下载到最新的repo脚本文件后,运行repo init来初始化一个仓库,需要添加一些额外的参数例如,-u 指定从哪个仓库下载,-b指定分支,-m指定manifest文件名称,-g指定项目组。
整理完后,对于manifest.xml不再感觉那么神秘难懂了,对于可能出现的错误,也可以去检查manfiest.xml文件(一般是对.repo/manifests/default.xml的链接),找出命令中可能出现的错误,再接着repo sync即可从仓库中拉下正确的源码。很方便啊!!
更多推荐
所有评论(0)