Tauri + GitHub Actions 自动化发布 Android APK 技术总结

一、问题背景

使用 Tauri 构建 Android 应用时,本地打包的 APK 与 Google Play 商店最终分发的版本签名不一致,导致:

  • 本地 APK 无法直接覆盖 Play 商店安装的版本
  • 从其他渠道下载的 APK 也无法被 Play 商店正常更新

根本原因是 Play App Signing 机制:

密钥类型 持有者 用途
Upload Key(上传密钥) 开发者本地 签名上传到 Play Console 的 AAB
App Signing Key(应用签名密钥) Google 托管 最终给用户下载的 APK 签名

本地用 Upload Key 签名的 APK,与商店版签名必然不同。


二、正确的自动化目标

目标不是让本地 Tauri 打出的 APK 和商店版签名一致(几乎不可能,因为没有 App Signing Key 私钥),而是:

  1. 用 Upload Key 签名 AAB 并上传到 Play Console
  2. 让 Google 用 App Signing Key 生成最终 APK
  3. 通过 API 下载这份已用 App Signing Key 签名的 Universal APK
  4. 把这份 APK 作为对外分发版本(官网、GitHub Release、其他渠道)

这样用户安装后,就能被 Play 商店正常检测并更新。


三、核心技术方案

1. 签名配置(Tauri 侧)

  • 生成 Upload Keystore(.jks

  • src-tauri/gen/android/keystore.propertiesbuild.gradle.kts 中配置 release 签名

  • 构建命令:

    bash 复制代码
    tauri android build          # 生成 AAB
    tauri android build --apk    # 生成本地测试用 APK(Upload Key 签名)

2. 服务账号准备(一次性)

  1. Google Cloud Console 创建服务账号
  2. 启用 Google Play Android Developer API
  3. 下载 JSON 密钥文件
  4. 在 Play Console → 用户和权限 中邀请该服务账号,并授予「发布管理」或「测试轨道发布」权限
  5. 将 JSON 内容存入 GitHub Secrets(PLAY_SERVICE_ACCOUNT_JSON

3. GitHub Actions 自动化流程

推荐完整链路:

arduino 复制代码
Tauri 构建 AAB
    ↓
上传 AAB 到 Play Console(draft 状态)
    ↓
等待 Google 生成已签名 APK
    ↓
调用 Generated APKs API 下载 Universal APK
    ↓
上传到 GitHub Release / 自有 CDN / 其他渠道
    ↓
(可选)将 draft 版本推进到正式发布

关键 API:

  • edits.bundles.upload:上传 AAB
  • generatedapks.list:获取可下载的 APK 列表
  • generatedapks.download:下载已签名的 Universal APK

也可用现成工具:

  • r0adkll/upload-google-play(上传 AAB)
  • fastlane 的 download_universal_apk_from_google_play(下载已签名 APK)

四、关键注意事项

  1. 签名差异是正常的

    本地 APK(Upload Key)与商店版(App Signing Key)永远不同,这是设计如此。

  2. 对外分发必须用 Google 签过名的 APK

    只有从 Play Console / API 下载的「Signed Universal APK」才能与商店版互相覆盖。

  3. Service Account 权限要足够

    至少需要测试轨道发布权限,下载 Generated APK 建议给更高权限。

  4. 处理延迟

    AAB 上传后,Google 生成最终 APK 通常需要几分钟,脚本中需适当等待或轮询。

  5. 安全

    Service Account JSON 只能存在 GitHub Secrets 中,绝不能提交到仓库。


五、最终推荐实践

  • 开发测试:继续用本地 Upload Key 签名的 APK,安装前先卸载商店版
  • 对外分发 / 官网下载:始终使用从 Play 下载的已签名 Universal APK
  • 自动化发版:GitHub Actions 完成「构建 → 上传 AAB → 下载已签名 APK → 发布」全流程

通过以上方案,既能享受 Play App Signing 的安全性与优化能力,又能实现完全自动化的多渠道发布,同时保证用户安装体验一致。

相关推荐
2401_8858850418 分钟前
国际语音php接口代码示例:PHP使用cURL快速调用语音发送API
android·开发语言·前端·人工智能·python·php·语音识别
wdfk_prog31 分钟前
GitHub push 失败:如何扫描并清理 Git 历史中的大文件
git·elasticsearch·github
_李小白43 分钟前
【Android UI开发】Android VideoView 使用介绍(一)
android·ui
Mr数据杨1 小时前
【Codex】用学生支持周报模块跟踪个性化支持进展
android·java·javascript·django·codex·项目开发
名剑走天下1 小时前
Android 面试题大全
android·kotlin
mmsx2 小时前
osmdroid 自定义地图视图:继承 MapView 的正确姿势与生命周期管理
android·osmdroid
Da Zeng2 小时前
快速搭建GitHub Page
github
明月_清风2 小时前
GitHub Actions 从入门到实战:一文搞懂 CI/CD 自动化
后端·ci/cd·github
QUOR3 小时前
Zorv AI 终端:基于 proot 沙箱的 Android 终端模拟器架构全解析
github