F-Droid 中文文档 下载 App

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应用分类列表必须
LicenseSPDX 许可证标识必须
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 时:

  1. 提交 RFP issue(说清楚应用信息)
  2. 维护者 review,确认许可证合规
  3. 两种方式继续:
  1. 元数据合并进 fdroiddata
  2. F-Droid 构建服务器自动构建并发布

第二种方式明显更快——如果你是开发者且熟悉 YAML 格式,建议自己写元数据。

元数据质量

元数据 YAML 有严格的质量要求:

如果元数据有问题,构建会失败,维护者会通知你修复。