fdroiddata 元数据仓库:4500+ 应用的构建配方在哪里维护
fdroiddata 是什么
fdroiddata 是 F-Droid 生态的应用元数据仓库——每个 F-Droid 仓库中的应用都在这里有一个 YAML 格式的元数据文件,告诉 fdroidserver:
- 从哪里拉取源码
- 怎么编译
- 应用叫什么、分类、许可证
- 更新策略是什么
这就是 F-Droid 构建体系的真相源(source of truth)。
仓库地址:gitlab.com/fdroid/fdroiddata
仓库结构
fdroiddata/
├── metadata/
│ ├── org.fdroid.fdroid.yml # F-Droid 客户端本身
│ ├── de.blinkt.openvpn.yml # OpenVPN for Android
│ ├── org.schabi.newpipe.yml # NewPipe
│ └── ...(4500+ 个 YAML 文件)
├── stats/
│ └── ...(统计脚本)
├── gradleproxies/
└── README.md
每个 YAML 文件的文件名是应用的包名(applicationId),这保证了唯一性。
元数据 YAML 详解
以一个简化的真实例子说明:
Categories:
- Internet
- Multimedia
License: GPL-3.0-only
WebSite: https://newpipe.schabi.org
SourceCode: https://github.com/TeamNewPipe/NewPipe
IssueTracker: https://github.com/TeamNewPipe/NewPipe/issues
Changelog: https://newpipe.schabi.org/blog/
Donate:
- https://newpipe.schabi.org/donate
AutoName: NewPipe
Summary: Lightweight YouTube client
Description: |
NewPipe 是一个轻量级的开源媒体播放器,
支持从 YouTube 等平台获取内容。
不需要 Google Play Services。
RepoType: git
Repo: https://github.com/TeamNewPipe/NewPipe.git
Builds:
- versionName: '0.27.1'
versionCode: 103
commit: v0.27.1
subdir: app
gradle:
- yes
AutoUpdateMode: Version
UpdateCheckMode: Tags
CurrentVersion: '0.27.1'
CurrentVersionCode: 103
关键字段说明
| 字段 | 作用 | 必须/可选 |
|---|---|---|
Categories | 应用分类列表 | 必须 |
License | SPDX 许可证标识 | 必须 |
WebSite | 应用官方网站 | 必须 |
SourceCode | 源码仓库 URL | 必须 |
Summary | 一句话描述 | 必须 |
Description | 完整描述(可多行) | 必须 |
RepoType | 源码类型(git、svn、hg、srclib) | 必须 |
Repo | 源码仓库地址 | 必须 |
Builds | 构建配方列表 | 必须(至少一条) |
AutoName | 自动生成的应用显示名 | 可选 |
Donate | 捐赠链接 | 可选 |
AntiFeatures | 反特性标注 | 可选 |
AutoUpdateMode | 自动更新模式 | 推荐有 |
CurrentVersion | 当前版本号 | 自动维护 |
Builds 块详解
Builds 是元数据的核心——每个条目描述一个版本的构建方式:
Builds:
- versionName: '1.2.3'
versionCode: 123
commit: v1.2.3 # 精确锁定的 commit hash 或 tag
subdir: app # 如果 build.gradle 不在根目录
gradle: # 使用 Gradle 构建
- yes
output: build/outputs/apk/release/app-release.apk
srclibs: # 第三方库源码(可选)
- Retrofit
rm: # 构建前删除的文件(可选)
- build.gradle.original
patches: # 需要应用的补丁(可选)
- fdroid.patch
gradleprops: # 传递给 Gradle 的属性
- minSdkVersion=24
build: # 自定义构建命令(可选,覆盖默认)
- sh -c "cd app && ./gradlew assembleRelease"
元数据更新流程
当开发者发布新版本后,元数据的更新方式:
方式一:AutoUpdateMode 自动更新
如果设置了 AutoUpdateMode: Version 或 AutoUpdateMode: Tags,fdroidserver 可以自动检测新版本并更新元数据中的版本信息。
方式二:维护者手动更新
F-Droid 维护者定期运行 fdroid checkupdates,检测有哪些应用有新版本,然后手动更新 YAML 文件中的 Builds 块。
方式三:开发者提交 Merge Request
开发者可以自己 fork fdroiddata,更新元数据后提交 MR。这种方式最快——维护者只需要 review 和合并。
元数据和 RFP 流程
当你通过 RFP(Request for Packaging)提交新应用到 F-Droid 时:
- 提交 RFP issue(说清楚应用信息)
- 维护者 review,确认许可证合规
- 两种方式继续:
- 维护者自己写元数据并提交(慢,但不需要开发者额外工作)
- 你自己写元数据,通过 MR 提交(快,维护者只需要 review)
- 元数据合并进 fdroiddata
- F-Droid 构建服务器自动构建并发布
第二种方式明显更快——如果你是开发者且熟悉 YAML 格式,建议自己写元数据。
元数据质量
元数据 YAML 有严格的质量要求:
- 必须能通过
fdroid lint检查 - 每个 Builds 条目必须能在干净环境中成功编译
- commit 必须精确锁定(不能是 branch HEAD)
- 版本号必须是真实的(不能随便填)
如果元数据有问题,构建会失败,维护者会通知你修复。