更新下载服务增加 Gitee 并设为优先下载源

- AppUpdateManager 由单源(Gitea)改为多源: SOURCES = gitee → gitea
  · 检查更新: 两个源都查, 取版本更高的那个(避免某一边滞后漏更新)
  · 下载: 按 Gitee → Gitea 顺序尝试, 失败自动换源(换源时进度归零)
  · Release 新增 mirrors: 同版本其它源地址作备用镜像
- 附件筛选收紧为只认 name.endsWith(".apk"):
  Gitee 的 assets 里带自动生成的源码包(v1.5.5.zip/.tar.gz), 宽松判断会下错东西
- 新增远程日志: UPDATE 检查/下载成功/下载失败/换源下载成功(含源与原因)
- 版本号按规则 3 占用一个 patch: 1.5.5(37) → 1.5.6(38)

实测(本机): Gitee Release API 免令牌可读; 附件直链 302→302→foruda.gitee.com CDN,
用 App UA 跟随跳转下载 22,236,768 字节、md5 8f16d48ca185e7109db9821286831e8b(与本地一致)、
文件头 PK、耗时约 11.9s。Gitea 侧同为 v1.5.5 + 同名附件。

本次仅编译检查 + 单元测试(9 例全过), 按要求**未打包**(未执行 assembleRelease)。
This commit is contained in:
zijunchiang
2026-10-07 19:21:47 +08:00
parent 39e3c8d617
commit e280afe3a3
3 changed files with 177 additions and 68 deletions
+11 -2
View File
@@ -85,7 +85,16 @@ git push origin master # origin = Gitea(唯一的代码同步目
App 内部两处端点已指向 Gitea(随本版 APK 生效):
- `AppUpdateManager.kt`:`gitea.kasugano.cn/api/v1/repos/zijunchiang/maidong-ktv/releases/latest`(App 内检查更新)
- `AppUpdateManager.kt`(**2026-10 起为多源,Gitee 优先、Gitea 兜底**):
- 检查更新:`https://gitee.com/api/v5/repos/zijunchiang/maidong-ktv/releases/latest`、
`https://gitea.kasugano.cn/api/v1/repos/zijunchiang/maidong-ktv/releases/latest`
—— **两个源都查**,取**版本更高**的那个(避免某一边滞后时漏更新);
- 下载安装包:按「**Gitee → Gitea**」顺序尝试,一个失败自动换下一个(同版本两个地址互为镜像);
- Gitee 的 Release API **无需令牌**即可读取(已实测),附件直链为 302 跳转到
`foruda.gitee.com` CDN,`instanceFollowRedirects=true` 可正常跟随(实测 22MB / 约 12s / md5 一致);
- ⚠️ **只认以 `.apk` 结尾的附件**:Gitee 的 `assets` 里还会带自动生成的源码包
(`v1.5.5.zip` / `v1.5.5.tar.gz`),宽松判断会把源码包当安装包下载;
- 下载校验三条:HTTP 2xx、>1MB、**文件头 `PK`**,再用 PackageManager 复核包名。
- `KtvJsBridge.kt`:`gitea.kasugano.cn/zijunchiang/maidong-ktv/raw/branch/master/app/src/main/assets/mobile/ktv_api.js`(JS 热更新)
> 注意:Gitea 的 raw 规范路径是 `/raw/branch/<分支>/<文件>`;`/raw/<分支>/<文件>` 会 303 跳转。
@@ -186,7 +195,7 @@ $BT/apksigner verify 目标名.apk
### 版本号
- `app/build.gradle`:`versionName "1.5.5"` / `versionCode 37`(18~21 被本机临时诊断包占用过)
- `app/build.gradle`:`versionName "1.5.6"` / `versionCode 38`(1.5.5/37 已发布;1.5.6 为"更新源加 Gitee"这一改动的版本号,尚未打包)(18~21 被本机临时诊断包占用过)
- App 内显示统一用纯版本号(不加 `(versionCode)` 括号)
- ⚠️ **发布构建已开启 NewApi 闸门**(`lint { checkReleaseBuilds true; fatal += ['NewApi'] }`):
任何「调用了高于 `minSdk 21` 且未做版本守卫的 API」都会让 `assembleRelease` 直接失败。