Manifest是用于描述Android项目或库的文件。它包含有关项目的信息,如包名、权限要求和组件(如活动、服务和广播接收器)。
Repo是用于管理Git仓库的工具。它是由Google开发的,用于管理Android源代码库。Repo允许用户将多个Git仓库组合在一起,并在这些仓库之间进行协作。
git的详细使用方法这里不介绍,这里只要知道git服务器端建立git仓库的命令:
git init --bare [仓库名].git
而客户端创建工程、关联远程仓库、第一次提交的方法是:
创建工程:
git init
关联远程仓库:
git remote add origin [远程仓库地址]
第一次提交:
git push -u origin master
repo的详细使用方法这里也不介绍,repo要用到的命令有:
repo init -u [manifest仓库地址] -b [branch]
初始化repo工程,会把manifest.git仓库拖下来。
我们搭建好自己的repo服务器后,也可以使用此命令拖下来自己的repo仓库。
repo sync
同步代码。
搭建好自己的服务器后,用此命令同步时将会从自己的repo仓库同步代码。
这个文件要好好介绍一下,我们将会对这个文件进行解析,解析出各个git仓库的服务器地址、本地路径,并根据解析的结果创建和同步这些git仓库代码。
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="aosp" fetch=".." review="https://android-review.googlesource.com/" />
可以设置多个remote地址,用后面的name区分。
后面可以选择使用哪一个remote地址。
<default revision="master-kernel-build-2022" remote="aosp" sync-j="4" />
remote=”” 来指定使用哪一个remote地址。
revision 指定分支,从remote地址拖工程时指定拖哪个分支
sync -j 指定同步线程数
<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的路径、版本、拖下来后的本地路径。
设置远程git服务器的属性,包括下面的属性:
一个manifest文件中可以配置多个remote元素,用于配置不同的project默认下载指向。
设定所有projects的默认属性值,如果在project元素里没有指定一个属性,则使用default元素的属性值。
Example:
<default revision="master-kernel-build-2022" remote="aosp" sync-j="4" />
指定一个需要clone的git仓库。