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 绑定指定分支,支持继承
相关推荐
沐怡旸3 小时前
【底层机制】Android OTA更新系统:原理与应用深度解析
android·面试
q***31144 小时前
【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建
android·前端·后端
SkyQvQ5 小时前
Android Studio 开发效率神器:Auto-import
android·android studio
木子予彤5 小时前
Compose 中的系统区域适配
android·android jetpack
q***72195 小时前
Y20030018基于Java+Springboot+mysql+jsp+layui的家政服务系统的设计与实现 源代码 文档
android·前端·后端
Code Warrior6 小时前
【MySQL数据库】数据类型
android·数据库·mysql
a***13147 小时前
python的sql解析库-sqlparse
android·前端·后端
r***86987 小时前
mysql的主从配置
android·mysql·adb
.豆鲨包7 小时前
【Android】深入理解Activity的生命周期和IntentFilter
android·java