【免费下载链接】session-android
Session Android - A Decentralized, Onion Routed, Private Messenger
Session Android 是一款去中心化、洋葱路由的私密即时通讯应用,其发布流程围绕四条 Git 分支策略、OS keyring 密钥管理和四个自动化脚本展开,最终将构建产物分别上架 Google Play Store、F-Droid 自托管仓库与 GitHub Release。本文带你完整走一遍这套发布流水线。
发布流程一图速览
一个完整的版本发布由 4 个脚本按顺序驱动,配合手动的人工审核步骤:
| 顺序 | 脚本 | 作用 |
|---|---|---|
| 1 | prepare-release.py | 创建release/版本号分支、提升版本号、推送并创建 GitHub草稿Release |
| 2 | update-release-notes.py | 根据分支已合并 PR 的标题自动生成 Changelog,覆盖写入草稿 |
| 3 | build-and-release.py | 构建并签名 play / fdroid / huawei 三种 flavor,自动提交 F-Droid PR、上传产物到 GitHub 草稿 |
| 4 | play-store.py | 通过 Play Developer API 上传 AAB 到 Google Play 轨道 |
⚠️ 关键顺序:步骤 1(草稿)与签名凭据必须存在,
build-and-release.py才能正常运行;update-release-notes.py必须在 PGP 签名追加之前执行,因为它会覆盖整个 Release 正文。
分支策略:master / dev / release
Session Android 采用经典的三分支模型:
| 分支 | 用途 |
|---|---|
master | 生产分支,永远代表线上正在运行的版本 |
dev | 日常开发集成分支 |
release/MINOR.MAJOR.PATCH | 短期发布分支,构建发布产物 |
- 完整版本发布:将
dev整体合入 release 分支 - 补丁版本发布:只 cherry-pick 需要的提交
版本号定义在 app/build.gradle.kts 的canonicalVersionCode与canonicalVersionName字段,prepare-release.py会自动 +1 并提交。
密钥管理:凭据一次存入 OS keyring
所有签名凭据不落盘,而是通过 _keyring.py 存入操作系统密钥环(macOS Keychain / Linux Secret Service)。凭据是一份 TOML 文档,包含三套密钥:
[build.play] # Play 签名(JKS 格式,base64 编码) [build.huawei] # 华为 AppGallery 签名 [fdroid] # F-Droid 签名(PKCS12 格式)一次性存储命令(随后删除明文文件):
python3 scripts/_keyring.py set release-creds < release-creds.toml python3 scripts/_keyring.py set play-service-account < service-account.jsonbuild-and-release.py还会通过ORG_GRADLE_PROJECT_*环境变量把密钥传给 Gradle(而非命令行参数),避免凭据出现在ps可读的进程参数中。
构建产物:三种 Flavor
| Flavor | 产物 | 用途 |
|---|---|---|
play | AAB + split APK | Google Play Store |
fdroid | split APK | F-Droid 自托管仓库 |
huawei | universal APK | 华为 AppGallery(含 HMS 推送) |
只想本地构建不发布?用--build-only即可:
./scripts/build-and-release.py --build-onlyF-Droid 上架:自托管仓库的原理
F-Droid 不同于 Play Store 的"上传审核"模式,它采用仓库模型:一个 APK 目录 + 签名的索引文件(index-v1.jar/index-v2.json),客户端靠它发现可用版本。详细架构见 FDROID_RELEASE.md。
Session 选择自托管仓库(session-foundation/session-fdroid),因为:
- 自己保管签名密钥,控制发布时机
- 保留最近 4 个版本的 APK,供无法立即升级的用户使用
- 通过 PR 流程让每次更新都经过人工审核
fdroid update命令只负责索引预构建 APK 并签名索引文件,不构建、不签 APK。敏感文件config.yml与生成的 metadata 在发布时由.tpl模板渲染、用完即删,永远不会提交进仓库。
自动 PR 流程:克隆 fdroid 仓库 → 创建release/<version>分支 → 拷入新 APK 并清理旧版本 →fdroid update重新生成索引 → 提交 PR 等待人工合并。
Play Store 上架:轨道与分阶段发布
play-store.py通过服务账号 + Play Developer API 管理四个轨道:internal/alpha/beta/production。
常用命令:
scripts/play-store.py status # 查看各轨道当前版本与发布比例 scripts/play-store.py upload # 上传 AAB 到 internal 轨道(草稿,不提交) scripts/play-store.py upload --track production --submit # 全量发布 scripts/play-store.py upload --track production --rollout 0.1 # 10% 灰度 scripts/play-store.py rollout --track production 0.5 # 灰度升至 50%两个实用技巧:
- 无 API 自动爬坡:Play 不支持灰度自动递增,可以用 cron 定时执行
rollout命令手动爬坡 - Managed publishing 建议保持开启:提交后的版本会审核但停留在控制台等待你手动点 Publish,这是最后一道人工闸门
开发期快速验证:--play-only只构建 Play AAB,配合play-store.py share走 Internal App Sharing 免审装到模拟器,versionCode不消耗,适合频繁迭代。
常见问题速查
| 现象 | 原因与解决 |
|---|---|
| 构建后 GitHub Release 没有产物 | 草稿 Release 不存在时上传被静默跳过,先跑prepare-release.py |
| 脚本报缺凭据 | keyring 中没有release-creds,用_keyring.py set存入一次 |
| 华为构建缺 HMS 依赖 | Gradle 命令需加-Phuawei参数 |
| Changelog 覆盖了签名块 | update-release-notes.py必须在 PGP 签名之前运行 |
更多细节见仓库根目录的 RELEASE.md 与 scripts/README.md。
写在最后
Session Android 的发布流水线体现了一个成熟的开源项目的工程纪律:密钥零落盘、构建全自动、上架有人工闸门。四个脚本各司其职,把"从提交到用户可下载"压缩成了一条可重复执行的命令序列,同时 F-Droid PR 与 Play 的 managed publishing 保留了人类审核的关键节点——这正是它作为去中心化隐私通讯应用该有的发布姿态。
【免费下载链接】session-android
Session Android - A Decentralized, Onion Routed, Private Messenger
相关推荐
Moonlight-Android 部署指南:从Google Play到F-Droid的完整流程
Moonlight Android 部署指南:从Google Play到F Droid的完整流程 Moonlight Android 是一个开源的 NVIDIA
音视频视频grc开发指南:如何为你的应用程序编写专属着色配置文件
grc开发指南:如何为你的应用程序编写专属着色配置文件 grc(generic colouriser)是一款强大的命令行输出着色工具,能够为各种命令的输出添加色
开发工具Retro Music Player完整发布指南:从构建到Play Store上架的终极教程
Retro Music Player完整发布指南:从构建到Play Store上架的终极教程 Retro Music Player是一款基于Material Y
移动开发音视频
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考