Manifest是用于描述Android项目或库的文件。它包含有关项目的信息,如包名、权限要求和组件(如活动、服务和广播接收器)。
Repo是用于管理Git仓库的工具。它是由Google开发的,用于管理Android源代码库。Repo允许用户将多个Git仓库组合在一起,并在这些仓库之间进行协作。
1、git
git的详细使用方法这里不介绍,这里只要知道git服务器端建立git仓库的命令:
git init --bare [仓库名].git
而客户端创建工程、关联远程仓库、第一次提交的方法是:
创建工程:
git init
关联远程仓库:
git remote add origin [远程仓库地址]
第一次提交:
git push -u origin master
2、repo
repo的详细使用方法这里也不介绍,repo要用到的命令有:
repo init -u [manifest仓库地址] -b [branch]
初始化repo工程,会把manifest.git仓库拖下来。
我们搭建好自己的repo服务器后,也可以使用此命令拖下来自己的repo仓库。
repo sync
同步代码。
搭建好自己的服务器后,用此命令同步时将会从自己的repo仓库同步代码。
3、manifest.xml文件
这个文件要好好介绍一下,我们将会对这个文件进行解析,解析出各个git仓库的服务器地址、本地路径,并根据解析的结果创建和同步这些git仓库代码。
1、开头会定义remote
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="aosp" fetch=".." review="https://android-review.googlesource.com/" />
可以设置多个remote地址,用后面的name区分。
后面可以选择使用哪一个remote地址。
2、指定默认参数
<default revision="master-kernel-build-2022" remote="aosp" sync-j="4" />
remote=”” 来指定使用哪一个remote地址。
revision 指定分支,从remote地址拖工程时指定拖哪个分支
sync -j 指定同步线程数
3、后面一大堆内容都是指定远程工程路径,以及拖下来的位置
<project path="build/kernel" name="kernel/build" >
<linkfile src="kleaf/bazel.sh" dest="tools/bazel" />
<linkfile src="kleaf/bazel.WORKSPACE" dest="WORKSPACE" />
<linkfile src="build.sh" dest="build/build.sh" />
<linkfile src="build_abi.sh" dest="build/build_abi.sh" />
<linkfile src="build_test.sh" dest="build/build_test.sh" />
<linkfile src="build_utils.sh" dest="build/build_utils.sh" />
<linkfile src="config.sh" dest="build/config.sh" />
<linkfile src="envsetup.sh" dest="build/envsetup.sh" />
<linkfile src="_setup_env.sh" dest="build/_setup_env.sh" />
<linkfile src="multi-switcher.sh" dest="build/multi-switcher.sh" />
<linkfile src="abi" dest="build/abi" />
<linkfile src="static_analysis" dest="build/static_analysis" />
</project>
<project path="common" name="kernel/common" revision="android13-5.15" >
<linkfile src="." dest=".source_date_epoch_dir" />
</project>
<project path="kernel/tests" name="kernel/tests" />
<project path="kernel/configs" name="kernel/configs" />
<project path="common-modules/virtual-device" name="kernel/common-modules/virtual-device" revision="android13-5.15" />
<project path="prebuilts/clang/host/linux-x86" name="platform/prebuilts/clang/host/linux-x86" clone-depth="1" />
<project path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8" clone-depth="1" />
<project path="prebuilts/boot-artifacts" name="platform/prebuilts/boot-artifacts" />
<project path="prebuilts/build-tools" name="platform/prebuilts/build-tools" clone-depth="1" />
<project path="prebuilts/kernel-build-tools" name="kernel/prebuilts/build-tools" clone-depth="1" />
<project path="tools/mkbootimg" name="platform/system/tools/mkbootimg" />
<project path="prebuilts/bazel/linux-x86_64" name="platform/prebuilts/bazel/linux-x86_64" clone-depth="1" />
<project path="prebuilts/jdk/jdk11" name="platform/prebuilts/jdk/jdk11" clone-depth="1" />
<project path="prebuilts/ndk-r23" name="toolchain/prebuilts/ndk/r23" clone-depth="1" />
<project path="external/bazel-skylib" name="platform/external/bazel-skylib" />
<project path="build/bazel_common_rules" name="platform/build/bazel_common_rules" />
<project path="external/stardoc" name="platform/external/stardoc" />
<project path="external/python/absl-py" name="platform/external/python/absl-py" />
</manifest>
path:本地相对路径,可以不指定,不指定的话表示和name相同。
name:远程相对与remote地址的路径。
version:指的是此git sync下来的branch。
groups:指定了该git存储库所属的组
linkfile: 指定应从 common 目录中的文件创建一个名为 .source_date_epoch_dir 的目标文件的符号链接。
这里的每个name就代表一个git子工程,整个android工程有很多个git子工程组成,这里指定了各个子工程相对于remote的路径、版本、拖下来后的本地路径。
4、总结
remote元素
设置远程git服务器的属性,包括下面的属性:
- name: 远程git服务器的名字,直接用于git fetch, git remote 等操作
- alias: 远程git服务器的别名,如果指定了,则会覆盖name的设定。在一个manifest中, name不 能重名,但alias可以重名。
- fetch: 所有projects的git URL 前缀
- review: 指定Gerrit的服务器名,用于repo upload操作。如果没有指定,则repo upload没有效果。
一个manifest文件中可以配置多个remote元素,用于配置不同的project默认下载指向。
default元素
设定所有projects的默认属性值,如果在project元素里没有指定一个属性,则使用default元素的属性值。
- remote: 之前定义的某一个remote元素中name属性值,用于指定使用哪一个远程git服务器。
- revision: git分支的名字,例如master或者refs/heads/master
- sync_j: 在repo sync中默认并行的数目。
- sync_c: 如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容。
- sync_s: 如果设置为true,则会同步git的子项目
Example:文章来源:https://www.toymoban.com/news/detail-730182.html
<default revision="master-kernel-build-2022" remote="aosp" sync-j="4" />
project元素
指定一个需要clone的git仓库。文章来源地址https://www.toymoban.com/news/detail-730182.html
- name: 唯一的名字标识project,同时也用于生成git仓库的URL。格式如下:
r e m o t e f e t c h / {remote_fetch}/ remotefetch/{project_name}.git - path: 可选的路径。指定git clone出来的代码存放在本地的子目录。如果没有指定,则以name作为子目录名。
- remote: 指定之前在某个remote元素中的name。
- revision: 指定需要获取的git提交点,可以是master, refs/heads/master, tag或者SHA-1值。如果不设置的话,默认下载当前project,当前分支上的最新代码。
- groups: 列出project所属的组,以空格或者逗号分隔多个组名。所有的project都自动属于"all"组。每一个project自动属于name:‘name’ 和path:'path’组。
例如,它自动属于default, name:monkeys, and path:barrel-of组。如果一个project属于notdefault组,则,repo sync时不会下载。
sync_c: 如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容。 - sync_s: 如果设置为true,则会同步git的子项目。
- upstream: 在哪个git分支可以找到一个SHA1。用于同步revision锁定的manifest(-c 模式)。该模式可以避免同步整个ref空间。
- annotation: 可以有多个annotation,格式为name-value pair。在repo forall 命令中这些值会导入到环境变量中。
- remove-project: 从内部的manifest表中删除指定的project。经常用于本地的manifest文件,用户可以替换一个project的定义。
- 子元素
到了这里,关于【Android】Manifest和Repo详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!