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 绑定指定分支,支持继承
相关推荐
砖厂小工5 小时前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github
张拭心6 小时前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
张拭心6 小时前
Android 17 来了!新特性介绍与适配建议
android·前端
Kapaseker8 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴8 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读