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

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

  • <remove-project> 的用途

  • groups、remote、revision 的含义

  • 多 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 相关仓库

  • aosp、pdk 是 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. 定义两个远端 origin 和 redroid

  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 绑定指定分支,支持继承
相关推荐
xiaoshiquan12066 小时前
Gradle 复合构建:宿主项目直接依赖 SDK 源码模块的配置实践
android
小师兄吃牛肉9 小时前
Android Studio 2025 专业介绍:新特性、性能与开发体验全面解析
android·ide·android studio
美摄科技9 小时前
安卓离线类美颜特效SDK
android
fengci.10 小时前
BUUCTF(困难部分)
android·开发语言·前端·学习·php
传奇开心果12 小时前
【Compose Multiplatform跨端声明式UI实用技术】第9课:跨平台 ViewModel 与状态架构
android·kotlin
用户693717500138412 小时前
当你向领导申请 AI 编程工具预算时,如果领导追问“能提效多少,有量化数据吗”,你该怎么回答?
android·后端·ios
hunterandroid13 小时前
WorkManager 后台任务调度实战:从一次性任务到周期执行
android
事圆则缓14 小时前
Android 屏幕适配的前世今生
android
andyweike14 小时前
kotlin dsl library工程怎么配置
android·开发语言·kotlin
啵啵啵鱼14 小时前
九、JDBC 操作 MySQL 数据库
android·数据库·mysql