Obtainium 如何接入 IzzyOnDroid 仓库跟踪应用更新?
2026/9/14 14:10:36 网站建设 项目流程

Obtainium 如何接入 IzzyOnDroid 仓库跟踪应用更新?

【免费下载链接】ObtainiumGet Android app updates straight from the source.项目地址: https://gitcode.com/GitHub_Trending/ob/Obtainium

如果你的 Android 应用托管在 IzzyOnDroid(izzysoft.de)仓库中,想要在不经过应用商店的情况下持续跟踪它的版本更新并在新版本发布时收到通知,Obtainium 内置的IzzyOnDroid源就是为此设计的。Obtainium 从应用的 release 页面或仓库 API 直接获取最新版本信息、下载 APK 并提示更新,IzzyOnDroid 与 F-Droid、GitHub 等一起列在 README 的 "Currently supported App sources" 中。这篇文章说明如何把一个 IzzyOnDroid 上的应用添加进 Obtainium 并验证更新跟踪生效。

前提条件

  • 已安装 Obtainium。README 的 Installation 一节给出了 GitHub releases、IzzyOnDroid 与 F-Droid 三种获取方式,并提供了核对信息:Package ID 为dev.imranr.obtainium,签名证书 SHA-256 为B3:53:60:1F:6A:1D:5F:D6:60:3A:E2:F5:0B:E8:0C:F3:01:36:7B:86:B6:AB:8B:1F:66:24:3D:A9:6C:D5:73:62(该签名对 F-Droid 版本同样有效)。
  • 设备有网络。后台更新检查任务要求网络连通(见 docs/DEVELOPER_GUIDE.md 的 "Background task architecture")。

哪些 URL 会被识别为 IzzyOnDroid 源

源识别由SourceProvider按域名匹配完成。lib/providers/source_provider.dart 中注册了IzzyOnDroid(),其构造器(lib/app_sources/izzyondroid.dart)声明:

name = 'IzzyOnDroid'; hosts = ['izzysoft.de']; allowSubDomains = true;

allowSubDomains = true意味着任何*.izzysoft.de子域名都会命中该源(匹配规则见 source_provider.dart 中以([^\.]+\.)*开头的正则)。

粘贴到 Obtainium 的 URL 会被标准化成两种规范格式之一,逻辑在 izzyondroid.dart:

# 主机名以 android. 开头时,规范化为: https://android.izzysoft.de/repo/apk/<appId> # 其余 izzysoft.de 主机时,规范化为: https://apt.izzysoft.de/fdroid/index/apk/<appId>

例如 Obtainium 自身在 IzzyOnDroid 上的页面就是https://apt.izzysoft.de/fdroid/index/apk/dev.imranr.obtainium(README Installation 中的安装徽章链接),标准化后末段dev.imranr.obtainium即应用的 Android package ID。IzzyOnDroid复用了 FDroid 的tryInferringAppId(izzyondroid.dart),而 FDroid 源设置了inferAppIdFromUrlPath = true(lib/app_sources/fdroid.dart),因此 app ID 直接取自规范 URL 的最后一个非空路径段(见 source_provider.dart 的tryInferAppIdFromLastPathSegment)。如果 URL 不符合上述路径模式,会抛出InvalidURLError,添加页会提示该 URL 无效。

在 Obtainium 中添加应用并跟踪更新

  1. 打开 Obtainium 的 "Add app" 页面(lib/pages/add_app.dart)。

  2. 在 "App source URL" 输入框粘贴 IzzyOnDroid 上该应用的页面 URL。输入时页面会实时用SourceProvider.getSource()校验;域名命中izzysoft.de后,选中的源显示为IzzyOnDroid,无需手动指定。

  3. 页面下方会出现 "Additional options for IzzyOnDroid" 表单。IzzyOnDroid没有定义自己的专属选项,它直接复用 FDroid 的三项每应用设置(izzyondroid.dart 委托给fd.additionalSourceAppSpecificSettingFormItems,定义在 fdroid.dart):

    • filterVersionsByRegEx:按正则过滤版本名,可选;填写时会校验是否为合法正则;
    • Try selecting suggested versionCode APK:开关,代码中默认值为true,开启时优先采用仓库 API 返回的suggestedVersionCode
    • Auto-select highest versionCode APK:同一版本有多个 APK 时自动取最高versionCode的一个。

    不修改这些选项也可以直接添加。

  4. 点击添加按钮。Obtainium 会请求仓库的 packages API 拉取最新版本:IzzyOnDroid的 getLatestAPKDetails 请求https://apt.izzysoft.de/fdroid/api/v1/packages/<appId>,APK 下载地址前缀为https://android.izzysoft.de/frepo/<appId>。请求成功时,应用出现在应用列表里并显示版本号,此时即完成接入;若返回 404 或包不存在,则报NoReleasesError

更新如何被发现

接入后不需要手动盯着仓库,有两条路径:

  • 手动:应用列表下拉刷新触发checkUpdates(),逐个应用请求上述 packages API 并保存结果(机制见 docs/DEVELOPER_GUIDE.md 的 "Update checking",并发上限 8)。
  • 后台:Obtainium 通过workmanager注册了周期任务obtainiumBgUpdateCheck(任务名见 lib/main.dart),最小间隔 15 分钟且要求网络连通;新 release 可用时按 README 的描述发送通知,满足条件的更新可后台静默安装。

版本选择逻辑在 fdroid.dart 的getAPKUrlsFromFDroidPackagesAPIResponse中,IzzyOnDroid原样复用它:API 返回 200 后,默认取仓库给出的最高versionName;若Try selecting suggested versionCode APK开启且没有版本过滤,则优先选suggestedVersionCode对应的 release;filterVersionsByRegEx填写后按versionName匹配第一个命中项。最终 APK 地址形如https://android.izzysoft.de/frepo/<appId>_<versionCode>.apk

验证与常见报错判断

  • 添加成功:应用列表中出现该应用并带版本号,应用详情页显示最新版本的检查时间;版本值应与 packages API 中该appIdversionName一致。
  • NoReleasesError:packages API 返回 404(HTTP 404 会被直接映射为该错误,见 source_provider.dart)或响应中没有包——通常是 URL 末段不是真实 package ID,或该应用已不在仓库中。
  • RateLimitError:服务端返回 429/403 时抛出,并依据retry-after头估算重试分钟数(source_provider.dart);后台任务对限速主机也会按延迟重试。
  • NoVersionError:填写了filterVersionsByRegEx但没有任何versionName命中,清空该过滤项即可。
  • InvalidURLError:URL 不满足android.izzysoft.de/repo/apk/…apt.izzysoft.de/fdroid/index/apk/…的路径模式,检查粘贴的页面地址是否完整。

限制

README 的 Limitations 一节说明:部分源依赖网页抓取,站点改版可能让解析失效,届时更可靠的抓取方式可能不可用。IzzyOnDroid 源依赖的是仓库公开的 packages API 与android.izzysoft.de的 APK 路径约定,如果这些接口行为变化,更新检查同样会失败,届时以 lib/app_sources/izzyondroid.dart 与 lib/app_sources/fdroid.dart 中的实际实现为准。

【免费下载链接】ObtainiumGet Android app updates straight from the source.项目地址: https://gitcode.com/GitHub_Trending/ob/Obtainium

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询