Skip to content

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 26 Sep 05:06
· 129 commits to main since this release

[0.3.2] — 2026-09-26

把增量补丁真正接进更新流程,并让 CI 自动出补丁。本版之后,从 0.3.x 升级只需下载
1.6 MB 左右(整包的 5% 上下),而不是 30 MB。

Added

  • 增量补丁接入更新流程:UpdateInstaller.download() 现在先试补丁——
    用本机已安装 APK(applicationInfo.sourceDir)的 sha256 去比对补丁元数据里的
    baseSha256,匹配就下补丁并拼装;任何一步不成立(没有补丁资产、基线不匹配、
    下载失败、拼装校验不过、签名不符)都静默回退整包。
    补丁是加速手段而不是必经路径,它失败绝不能让用户更新不了。
    拼装结果先比 targetSha256(ApkPatchApplier 内部)再比签名证书 ——
    两道校验与整包路径完全一致,安全性没有放松。
  • CI 自动出补丁:新增 .github/workflows/release.yml,打 v* tag 时自动
    跑测试 → 构建两个 ABI → 对上一个 release 的同 ABI APK 生成增量补丁 →
    创建/更新 release 并上传 APK + 补丁(patch-<from>-to-<to>-<abi>.{zip,json})。
    发布说明从 CHANGELOG 同版本段落抽取(tools/extract_release_notes.py,
    段落缺失时写占位说明而不是留空);发布前校验 tag 与 versionName 一致。
  • UpdateChecker.pickPatchAssets():从 release 资产里挑出 patch-*.json,且配对的
    .zip 必须存在(纯函数,5 例单测)。不按 ABI 过滤 —— 该用哪份由 baseSha256
    决定,名字里的 arch 只是辅助。
  • 更新弹窗可读化:新增 ReleaseNotes.toPlainText(),把发布正文的 Markdown
    转成对话框里能读的文本(标题 → 【】、引用去 >、加粗/行内代码/链接去标记、
    表格 → · 连接、首个含版本号的标题丢掉),正文区改成固定高度 + 可滚动、显示全文。

Fixed

  • 更新弹窗把原始 Markdown 直接显示、而且被截断(真机截图实锤):原来
    Text(info.body.take(400)) —— 用户看到的是 ## v0.3.1-fix、>、**修复向**、
    | 表格 |,正文还只露出开头几行。
    坑:发布正文是硬换行的,**加粗** 很容易跨行,逐行跑正则会漏掉那一对
    (真机就是这么漏的)→ 必须先按段落合并软换行再清标记。
  • 测试基建:-Dkaze.* 现在会透传给测试 JVM(此前 Gradle 的 -D 只作用于守护进程,
    两条"吃真实产物"的用例——真实补丁互通、真实发布正文——一直在静默跳过,
    绿的但什么都没验)。