diff --git a/2.Design/ROADMAP-M0-M1.md b/2.Design/ROADMAP-M0-M1.md index 1ee503b..313c902 100644 --- a/2.Design/ROADMAP-M0-M1.md +++ b/2.Design/ROADMAP-M0-M1.md @@ -433,6 +433,7 @@ ### 6.2 安卓 - [x] `data/AppUpdater.kt`:查清单 → 下到 `Android/data//files/updates/`(先写 `.part` 再改名)→ 校验 sha256 → 经 `FileProvider` 交给系统安装器 - [x] `ui/UpdateDialog.kt`:当前/新版本号、更新说明、下载进度、失败重试;「允许安装未知应用」只跳系统设置,不代点 +- [x] 权限回来那一跳要接住:用户在系统设置里开完开关回到 App,再点同一个按钮时先复查权限,开了就直接装——否则按钮点了没反应 - [x] 启动时自动查一次;首页底部有「检查更新」手动入口,结果用一句话回给用户 - [x] 图标换成与 Web 的 `` 同一套图形(墨绿圆角底 + 三条米白圆头线 + 陶土点),生成 `mipmap-*/ic_launcher{,_round}.png` 与自适应图标 `mipmap-anydpi-v26/ic_launcher{,_round}.xml`,512px 预览存 `2.Design/screens/android-icon-512.png` - [x] 版本 `versionCode = 2` / `versionName = "0.2.0"`;发布签名从 `android/keystore.properties` 读,无该文件时回落调试签名(保证别人 clone 下来也能 `assembleRelease`) @@ -448,3 +449,4 @@ - [x] `assembleRelease` 成功:`app-release.apk` 7.4 MB,`apksigner verify --print-certs` 显示证书 `CN=Dadao Task` - [x] 本地 `GET /api/v1/app/release/latest?version_code=1` → `has_update=true`、`download_url` 可下(200,7 762 912 字节),`version_code=2` → `false` - [x] 生产(`http://192.168.8.188:8200`)同上,安装包已随部署上传 +- [x] 模拟器上走通全流程:装 debug 包 → 登录 → 启动即弹「有新版」→ 下载 7 762 912 字节(与清单 `size` 一致,`.part` 已改名)→ 无安装权限时提示去开 → 拉系统安装器「是否更新此应用」→ 装完 `versionCode=2 / versionName=0.2.0`;截图 `2.Design/screens/android-update-{dialog,permission,installer}.png` 与 `android-home-check-update.png` diff --git a/2.Design/screens/android-home-check-update.png b/2.Design/screens/android-home-check-update.png new file mode 100644 index 0000000..0689814 Binary files /dev/null and b/2.Design/screens/android-home-check-update.png differ diff --git a/2.Design/screens/android-update-dialog.png b/2.Design/screens/android-update-dialog.png new file mode 100644 index 0000000..54ab1c4 Binary files /dev/null and b/2.Design/screens/android-update-dialog.png differ diff --git a/2.Design/screens/android-update-installer.png b/2.Design/screens/android-update-installer.png new file mode 100644 index 0000000..028554e Binary files /dev/null and b/2.Design/screens/android-update-installer.png differ diff --git a/2.Design/screens/android-update-permission.png b/2.Design/screens/android-update-permission.png new file mode 100644 index 0000000..2bebff0 Binary files /dev/null and b/2.Design/screens/android-update-permission.png differ diff --git a/android/app/src/main/java/com/dadao/task/ui/UpdateDialog.kt b/android/app/src/main/java/com/dadao/task/ui/UpdateDialog.kt index 4867de4..1e2b82a 100644 --- a/android/app/src/main/java/com/dadao/task/ui/UpdateDialog.kt +++ b/android/app/src/main/java/com/dadao/task/ui/UpdateDialog.kt @@ -96,7 +96,15 @@ fun UpdateDialog( when (phase) { UpdatePhase.Denied -> PrimaryButton( text = "去开启安装权限", - onClick = { updater.openInstallPermission() }, + onClick = { + // 用户可能是刚从系统设置回来:权限开了就直接装,没开才把人送过去 + val downloaded = file + if (downloaded != null && updater.canInstall()) { + handToInstaller(downloaded) + } else { + updater.openInstallPermission() + } + }, ) UpdatePhase.Downloaded -> PrimaryButton(