【Android】Manifest和Repo详解

这篇具有很好参考价值的文章主要介绍了【Android】Manifest和Repo详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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:

<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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • error: attribute android:requestLegacyExternalStorage not found.error: failed processing manifest.

    最近调试项目的时候遇到如下错误: error: attribute android:requestLegacyExternalStorage not found. error: failed processing manifest. 这个错误的原因是在AndroidManifest.xml的application中增加了一行配置 \\\"android:requestLegacyExternalStorage=\\\"true\\\" 经过分析和尝试,发现是module的compileSdk小于29时,会提示该错误

    2024年02月15日
    浏览(40)
  • Android Studio错误修复Connect to repo.maven.apache.org:443

    环境 名称 版本 操作系统 Windows10(64位) AndroidStudio 2022.3.1 Patch 2 前言 最近更新了AndroidStudio编写程序的时候发现gradle时老是报 read time out 错误提示 分析 当出现这个警告时,你应该猜到这是一个连接不上的问题(Connect to repo.maven.apache.org:443),连接错误的原因是因为没有正确上网导

    2024年02月07日
    浏览(48)
  • 快速解决Android编译报错 : Manifest merger failed with multiple errors, see logs

    编译项目的时候,遇到Android Manifest合并失败的情况就挺头疼的。 Manifest merger failed with multiple errors, see logs 解决方法第一种 解决Manifest merger failed with multiple errors, see logs问题 - 优博客 (ubock.com) 解决方法第二种(我自己摸索出来的) 检查你所有的模块目录下的build.gradle文件里设

    2024年02月16日
    浏览(42)
  • AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82

    最近写文章,反复多次折腾AOSP代码,因通过网络repo sync aosp代码,能一次顺利下载的概率很低,以前就经常遇到,但从未总结,导致自己也要回头检索方法,所以觉得可以总结一下,涉及下载最新、各分支AOSP代码的方法,以及如何处理所遇到的同步错误及其解决方法,现分享

    2024年02月03日
    浏览(60)
  • Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27

    最近准备更新专栏文章,AOSP源码自然也需要进行更新了,但这次不是为最新的android 13, 而是取android 12的最新tag version: android-12.1.0_r27,这应该是市面上的主流版本。 每次更新,自然也会遇到问题,所以就记录一下 另外,这次我们将直接配置本地服务器,而不是通过docker,让

    2023年04月26日
    浏览(47)
  • Android Studio 报出此错AAPT: error: unexpected element <intent-filter> found in <manifest><application>.

    出现错误:AAPT: error: unexpected element intent-filter found in manifestapplication. 你的Android Studio会出现: 你每次运行都会出现这个界面,你可能会有些崩溃,因为我当时学习的时候,我卡在此处,放弃了好长一段时间,不过随着我再次拾起Android开发,我逐渐觉得发现问题,解决问题,

    2023年04月11日
    浏览(37)
  • Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit v

    新建项目运行出现以下异常  Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. 按照提示要去AndroidManifest.xm

    2024年02月12日
    浏览(49)
  • Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit va

    Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details. 升级SDK到31后报错如上: 意思是说Android12版本以上需要设置

    2024年02月02日
    浏览(50)
  • repo init详解

    首先选择manifest源,一般直接使用清华或中科大的镜像源 repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest是清华提供的镜像源 repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest是中国科学技术大学的镜像源 repo init推荐使用-b 分支标签、--depth=1和--platform=auto这几个选项加快速度

    2024年01月24日
    浏览(29)
  • Repo 使用详解

    参考文章: 清华镜像之Android 镜像使用帮助 Android系统源码编译 Repo工具的使用 Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git。 1) ubuntu24.04(250G+6核+16GRAM) 2) VirtualBox6.1.34 1) 安装python 2)安装Git 配置Git信息 3)安装curl 4) 安装repo 1)创建源码存放目录 2)初始

    2024年02月06日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包