Android Repo Manifest 文件详解(基于 Redroid 定制示例)

本文结合一个实际用于 Android 14 + Redroid 的 manifest 片段,对 <manifest> 中各种常用标签和属性进行解释。重点讲解:

  • <remove-project> 的用途

  • groupsremoterevision 的含义

  • 多 remote、多项目定制的完整流程

Manifest 基本结构

Android 使用 repo 工具 统一管理多个 Git 仓库,而这些仓库的组织方式由 manifest.xml 描述。一个 manifest 典型结构如下:

复制代码
<manifest>
    <remote ... />
    <project ... />
    <remove-project ... />
    <include ... />
</manifest>

下面基于 manifest 文件逐项解析。

1. <remote> --- 远端仓库定义

示例:

复制代码
<remote name="origin" fetch="https://git.example.com/android14/" revision="android-tag" />
<remote name="redroid" fetch="https://github.com/example-redroid/" revision="redroid-14.0.0" />

✔ 用法说明

属性 说明
name remote 的名字,通过 remote="origin" 关联到 <project>
fetch 仓库地址前缀,后面会拼接 <project name=""> 的路径
revision 默认分支。如果 <project> 没有单独指定 revision,则继承 remote 的 revision

例如:
fetch="https://git.example.com/android14/"

配合
<project name="platform_frameworks_base" />

最终仓库地址变成:

复制代码
https://git.example.com/android14/platform_frameworks_base.git

2. <remove-project> --- 移除原生 AOSP 中不需要的仓库(重点)

这是定制 Android 时最常见的操作之一。

示例:

复制代码
<remove-project name="platform/frameworks/base" />
<remove-project name="platform/packages/apps/Gallery2" />

✔ 用途

AOSP 默认 manifest 中移除指定项目,使 repo 不再同步这些仓库。

当你需要:

  • 替换 AOSP 的原生模块(frameworks/base、frameworks/native 等)

  • 因为 Redroid 定制,使用自己的 patch 版本

  • 不希望下载体积巨大的历史仓库(如 chromium-webview)

就会使用 <remove-project>

✔ remove-project 是如何生效的?

repo 解析 manifest 时:

  1. 加载 Google 提供的默认 manifest(AOSP 默认项目)

  2. 处理 <remove-project>,把指定 name 的项目移除

  3. 加载你新的 <project> 标签(替代内容)

因此你可以安全地用自己的版本覆盖系统模块。

3. <project> --- 指定要同步的 Git 仓库

示例:

复制代码
<project 
    path="frameworks/base" 
    name="platform_frameworks_base"
    groups="redroid,aosp,pdk"
    remote="origin" />

✔ 属性说明

属性 说明
path 同步到本地的目录路径(本地目录)
name Git 仓库名(会拼接到 remote.fetch)
remote 使用哪个 <remote> 的地址
revision 指定分支(可覆盖 remote 默认 revision)
groups 项目归属的组,可用于 repo sync -g 选择性同步
clone-depth 使用浅克隆,减少仓库体积(类似 git clone --depth=1)

groups 的详细解释(重点)

示例:

复制代码
groups="redroid,aosp,pdk"

groups 本质是标签,用于将项目分类。

例如:

  • 你可以用
    repo sync -g redroid

    只同步 Redroid 相关仓库

  • aosppdk 是 AOSP 内置组

这是管理多模块项目的最佳实践。

revision 的详细解释(重点)

Revision 代表项目要同步的分支。

继承机制:

  • 如果 <project> 有自己的 revision → 优先使用

  • 如果没有 → 使用 <remote> 的 revision

  • 如果 remote 也没有 → 使用 repo 默认分支(通常 master/main)

示例

复制代码
<remote name="origin" revision="android-tag" />

则所有未指定 revision 的项目默认用:android-tag。适用于统一版本管理。

4. <include> --- 引入额外 manifest

示例:

复制代码
<include name="webview.xml"/>
<include name="redroid_ext.xml"/>

用途:

  • 拆分 manifest,保持主 manifest 简洁

  • 方便维护大型项目(如 chromium-webview、输入法、扩展组件等)

最终结合本 manifest 的工作流程

  1. 定义两个远端 originredroid

  2. 使用 <remove-project> 移除 AOSP 默认仓库

  3. 使用 <project> 重新添加来自自有 Git 仓库的定制版本

  4. 添加 Redroid 自有仓库(device/redroid、hardware/redroid 等)

  5. include 其他子 manifest(webview、extensions 等)

这个结构非常适合"自定义安卓 + Redroid 虚拟化 Android 设备"的场景。


总结

本文说明了 manifest 中最常用的标签:

标签 作用
<remote> 定义仓库地址前缀
<project> 指定具体仓库及本地目录
<remove-project> 移除 AOSP 默认仓库(用于替换)
<include> 引入其他 manifest 子文件
groups 项目分类,可选择性同步
revision 绑定指定分支,支持继承
相关推荐
xiaolizi5674891 天前
安卓远程安卓(通过frp与adb远程)完全免费
android·远程工作
阿杰100011 天前
ADB(Android Debug Bridge)是 Android SDK 核心调试工具,通过电脑与 Android 设备(手机、平板、嵌入式设备等)建立通信,对设备进行控制、文件传输、命令等操作。
android·adb
梨落秋霜1 天前
Python入门篇【文件处理】
android·java·python
遥不可及zzz1 天前
Android 接入UMP
android
Coder_Boy_1 天前
基于SpringAI的在线考试系统设计总案-知识点管理模块详细设计
android·java·javascript
冬奇Lab1 天前
【Kotlin系列03】控制流与函数:从if表达式到Lambda的进化之路
android·kotlin·编程语言
冬奇Lab1 天前
稳定性性能系列之十二——Android渲染性能深度优化:SurfaceFlinger与GPU
android·性能优化·debug
冬奇Lab1 天前
稳定性性能系列之十一——Android内存优化与OOM问题深度解决
android·性能优化
用户74589002079541 天前
线程池
android