Github Store:将 GitHub Releases 变成跨平台应用商店的开源解决方案

本文欲回答的核心问题:Github Store 是什么?它如何帮助开发者与用户更方便地发现、安装和管理来自 GitHub 的可安装二进制应用?

Github Store 是一个基于 Kotlin Multiplatform 开发的跨平台应用(支持 Android 和桌面端),它将 GitHub Releases 转变为类似应用商店的体验。只展示那些真正提供可安装二进制文件的公共仓库,让用户在统一界面中浏览、安装和更新应用,而无需手动翻找 Releases 页面。

Project logo
图片来源:项目官方仓库

Banner
图片来源:项目官方仓库

Github Store 解决了什么痛点?

核心问题:为什么需要一个专门的“Github Store”来管理 GitHub 发布的应用?

许多开源项目通过 GitHub Releases 分发可直接安装的二进制文件(如 APK、EXE、DMG、AppImage 等),但用户往往需要手动搜索仓库、找到最新 Release、挑选适合自己平台的资产文件。这个过程繁琐且容易出错。Github Store 的出现,正是为了解决这个痛点:它自动筛选出真正提供可安装资产的仓库,并为用户呈现干净、一致的安装体验。

在实际使用中,想象你是一名 Android 用户,想尝试多个开源应用:以往你可能需要在浏览器中一个个打开仓库,检查是否有 APK;现在打开 Github Store,首页就展示了“Trending”“Recently Updated”“New”等分类,且只显示有 APK 的项目,一键即可下载并安装。这大大提升了发现和试用的效率。

核心功能一览

核心问题:Github Store 提供了哪些关键功能,让安装 GitHub 应用变得更简单?

Github Store 的功能设计围绕“智能发现”和“无缝安装”展开,主要包括以下几个方面:

  • 智能发现机制
    首页分为“Trending”“Recently Updated”和“New”三个板块,支持基于时间的筛选。只有那些最新 Release 包含有效可安装资产的仓库才会被展示。系统会根据平台(Android 或桌面)智能排序,比如 Android 用户会优先看到带有 androidapk 等话题的仓库。

  • 始终安装最新版本
    每次安装都直接从 /releases/latest 获取资产,并显示对应的变更日志。用户看到的版本信息和 changelog,就是即将安装的那一个。

  • 丰富的应用详情页
    包括应用名称、版本、星标数、Fork 数、开放 Issue 数、渲染后的 README(作为“关于此应用”)、最新 Release 的变更日志,以及所有可安装资产的列表(带平台标签和文件大小)。

  • 平台适配的安装行为

    • Android:下载 APK 后直接调用系统包安装器,并将安装记录保存到本地数据库,在专用“Apps”页面显示已安装应用,支持更新提醒。
    • 桌面(Windows/macOS/Linux):下载文件到用户 Downloads 文件夹,并用默认程序打开。
  • 外观与主题
    采用 Material 3 设计,支持 Android 上的 Material You 动态颜色,以及可选的 AMOLED 纯黑暗色模式。

在 Android 上使用时,一个典型场景是:你看到一个有趣的应用,点进详情页,阅读 README 和最新 changelog,确认无误后点击“Install latest”,APK 下载完成后自动弹出安装界面。安装成功后,它会出现在你的“Apps”列表中,一旦有新版本发布,就会出现更新提示——这种体验与传统应用商店几乎无异,却完全来自 GitHub。

如何下载和安装 Github Store?

核心问题:用户如何获取并开始使用 Github Store?

下载方式非常直接:

  • 从 GitHub Releases 页面获取最新版本。
  • 也可以通过 F-Droid 仓库安装 Android 版。

Get it on GitHub
Get it on F-Droid

macOS 用户注意:首次打开时,系统可能提示无法验证开发者,这是因为应用尚未经过公证。你可以在“系统设置 → 隐私与安全”中选择“仍要打开”来允许运行。

个人反思:开源应用在分发时常常会遇到这类平台限制,这其实提醒我们,真正的安全来自于社区审查和透明的代码,而不是单一的签名机制。选择信任一个项目,往往比信任某个商店更可靠。

你的项目如何自动出现在 Github Store 中?

核心问题:作为开发者,我需要做什么才能让自己的应用被 Github Store 发现并展示?

好消息是:完全无需手动提交。Github Store 通过 GitHub 公共搜索 API 自动发现项目,只要满足以下条件,你的仓库就会有机会被收录:

  1. 仓库必须是公开的(Public)。
  2. 至少有一个已发布的 Release(非草稿、非预发布)。
  3. 最新 Release 中必须包含至少一个受支持的可安装资产:

    • Android:.apk
    • Windows:.exe.msi
    • macOS:.dmg.pkg
    • Linux:.deb.rpm.AppImage
  4. 系统会忽略自动生成的源码压缩包(zip/tar.gz)。

此外,适当添加话题标签(如 androiddesktopapkcompose-desktop 等)和一定的星标数,会显著提升在“Popular”“Updated”“New”板块的曝光概率。

一个实际案例:如果你正在开发一个跨平台的 Compose Desktop 应用,只要在最新 Release 中上传 AppImage、DMG 和 MSI,并在仓库话题中加入 compose-desktopdesktop,那么桌面用户很快就能在 Github Store 的“Recently Updated”中看到它。

反思:这种完全自动、无需审批的收录机制,是 Github Store 最大的亮点之一。它降低了中心化风险,也让小型独立开发者更容易被看到——这正是开源精神的核心。

Github Store 的工作原理(技术视角)

核心问题:Github Store 在后台是如何实现智能筛选和平台适配的?

整个流程可以分为四个主要阶段:

  1. 搜索与筛选
    使用 GitHub 的 /search/repositories 接口,结合平台相关关键词和话题进行查询。对结果进行简单评分,过滤掉已归档或信号过弱的仓库。

  2. Release 与资产验证
    对候选仓库调用 /repos/{owner}/{repo}/releases/latest,检查 assets 中是否包含对应平台的受支持文件扩展名。如果没有,则排除该仓库。

  3. 详情页数据聚合
    收集仓库基本信息(星标、Fork、Issue)、最新 Release 的标签、发布日期、变更日志,以及默认分支的 README 内容。

  4. 安装流程实现
    用户点击安装时,自动选择最匹配当前平台的资产,进行流式下载。Android 端会进一步记录安装信息并监控包变化,实现更新检测。

这种设计确保了用户看到的每一个应用,都是“真实可用”的,避免了大量“只有源码”的仓库干扰。

技术栈详解

核心问题:Github Store 使用了哪些现代技术来实现跨平台一致性?

Github Store 完全基于 Kotlin Multiplatform 构建,最低支持 Android SDK 24。核心技术栈包括:

  • UI 框架:Compose Multiplatform + Material 3,实现 Android 和桌面端代码高度共享。
  • 网络层:Ktor 3(Android 使用 OkHttp 引擎,桌面使用 Java 引擎)。
  • 数据序列化:Kotlinx Serialization JSON。
  • 依赖注入:Koin 4。
  • 导航:JetBrains Navigation Compose。
  • Android 专属:Room 数据库(用于已安装应用跟踪)、AndroidX DataStore(存储 GitHub Token)。
  • 图片加载:Coil 3。
  • Markdown 渲染:multiplatform-markdown-renderer-m3。
  • 其他:Kotlin Coroutines、Flow、Kermit 日志等。

一个典型的应用场景:在详情页加载 README 时,应用会异步请求默认分支的 README 文件,通过 multiplatform-markdown-renderer-m3 渲染成美观的 Markdown 内容,并在 Android 和桌面端保持一致的视觉效果。

个人见解:选择 Compose Multiplatform 而非传统的平台特定框架,体现了开发者对代码复用和维护成本的深刻思考。在实际项目中,这种共享 UI 逻辑的做法,能让小团队以极低的成本维护多个平台的体验一致性。

使用 Github Store 的优势

核心问题:相比直接访问 GitHub Releases,使用 Github Store 有哪些实际好处?

  • 减少无效搜索:只展示真正提供二进制文件的项目,避免浪费时间。
  • 统一安装体验:无论 Android 还是桌面,都有一致的界面和操作流程。
  • 更新提醒(Android):已安装应用会自动检测新版本,无需手动检查。
  • 安全透明:支持 GitHub 登录提升 API 限额,同时提供“在 AppManager 中打开”功能,让用户在安装前检查权限和 trackers。

反思:在开源世界里,我们常常需要在便利性和安全性之间权衡。Github Store 并没有试图替用户做决定,而是提供了足够的工具(如查看 changelog、检查权限)让用户自己做出明智选择——这是一种值得尊敬的设计哲学。

实用摘要与操作清单

一页速览(One-page Summary)

Github Store 是一个将 GitHub Releases 变成应用商店的跨平台工具(Android + 桌面)。它只展示包含可安装资产(APK、EXE、DMG 等)的公共仓库,支持智能发现、最新版本一键安装、更新提醒(Android)和美观的详情页。完全自动收录,无需提交。基于 Kotlin Multiplatform + Compose Multiplatform 实现,代码开源,采用 Apache 2.0 许可。

操作清单

  1. 从 GitHub Releases 或 F-Droid 下载并安装 Github Store。
  2. 打开应用,浏览 Trending / Recently Updated / New 板块。
  3. 点击感兴趣的应用,查看 README 和最新 changelog。
  4. 点击“Install latest”开始下载并安装。
  5. (Android)在“Apps”页面查看已安装应用与更新状态。

常见问答(FAQ)

  1. Github Store 是否需要 GitHub 账号?
    不需要,但可选登录(OAuth 设备流)可以提升 API 调用限额,减少请求限制。

  2. 我的项目为什么没有出现在 Github Store 中?
    请检查:仓库是否公开、是否有已发布的非预发布 Release、最新 Release 是否包含对应平台的资产文件(如 .apk、.exe 等),以及是否添加了相关话题标签。

  3. Github Store 会跟踪或上传我的安装信息吗?
    不会。Android 端仅在本地数据库记录安装信息,用于更新检测;所有操作都在设备本地完成。

  4. 在桌面端安装后,文件会保存在哪里?
    下载到用户默认的 Downloads 文件夹,并自动用系统默认程序打开。

  5. macOS 上提示无法打开应用怎么办?
    进入“系统设置 → 隐私与安全”,找到 Github Store 的提示,点击“仍要打开”即可。

  6. Github Store 是否会对下载的文件进行病毒扫描?
    不进行。该应用仅帮助下载开发者已发布的资产,用户需自行承担安装风险。

  7. 如何让自己的桌面应用更容易被桌面用户发现?
    在最新 Release 中提供 .dmg、.AppImage、.msi 等文件,并在话题中加入 desktopcompose-desktop 等标签。

  8. Github Store 是否支持 iOS?
    当前不支持,仅支持 Android 和桌面平台(Windows/macOS/Linux)。