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 绑定指定分支,支持继承
相关推荐
xiangpanf2 小时前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx5 小时前
安卓线程相关
android
消失的旧时光-19435 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon6 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon6 小时前
VSYNC 信号完整流程2
android
dalancon6 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户69371750013848 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android8 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才9 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶9 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle