V1.5.5: 加入源 a.ktv8.my;"所有源失效"改为明确弹窗提示

一、加入歌曲源 a.ktv8.my(置于 gz.ac16.vip 之后)
实测(代理修复后,DNS 直连真实 IP 20~42ms):
- 真实 IP 154.219.102.181 —— 与 w345.my **同一台服务器**(同一后台的兄弟入口);
- GET / → 200(917B,主机面板默认占位页);
- i.php → 200,170B,与其它 5 个入口响应**逐字节一致**:
  code=200 / msg=ok / ordertype=0 / end_date=2026-10-05 14:58:21 / retry=5 / heart_time=5400,token 正常下发;
- 自身媒体路径 /<编号>.ts 与 /ad_files/my_ad_video.ts 均 404(138B,与 e.ac19.cn 的 404 逐字节相同)
  → 它不托管广告媒体;
- ⚠️ do.php 取址行为未能定性: 测试期间本机出口 IP(与门店设备同一个 188.253.112.231)
  的配额被反复探测耗尽,表现为"成功一两次后长时间静默丢包"(与代码里记录的
  trial_times:2 × trial_duration:5 吻合)。故置于次位,由运行时升降序自动调整。
KTV_BRIDGE_API 10 → 11(ktv_api.js 两处标记 + KtvJsBridge 两处校验)。

二、"所有源都取不到地址"给出明确提示
新增 Eac19WindowGuard.onAllFailed ← noteAllSourcesFailed(),由 SongUrlResolver.resolve()
在**本轮彻底失败**时调用(403 / 只返回广告 / 网络异常都算),弹窗文案:
    「远程源已全部失效,等待新版本修复」
- 与既有的 onBlocked(风控 403 → "换公网 IP")常常同时触发,因此在 onBlocked 处理器里
  用 lastAllFailedAt() 做 60 秒去重,不会同时弹两个框;两者均 15 分钟节流。
- 以前这里只有一句"无法生成下载地址"的 toast,用户看起来像界面没反应。

版本 1.5.4(36) → 1.5.5(37);签名证书不变。测试 9 例全通过。
This commit is contained in:
zijunchiang
2026-10-07 07:53:48 +08:00
parent c1fd0fa319
commit 97ca1ae28e
7 changed files with 74 additions and 7 deletions
+15 -1
View File
@@ -165,7 +165,7 @@ $BT/apksigner verify 目标名.apk
### 版本号
- `app/build.gradle`:`versionName "1.5.4"` / `versionCode 36`(18~21 被本机临时诊断包占用过)
- `app/build.gradle`:`versionName "1.5.5"` / `versionCode 37`(18~21 被本机临时诊断包占用过)
- App 内显示统一用纯版本号(不加 `(versionCode)` 括号)
- ⚠️ **发布构建已开启 NewApi 闸门**(`lint { checkReleaseBuilds true; fatal += ['NewApi'] }`):
任何「调用了高于 `minSdk 21` 且未做版本守卫的 API」都会让 `assembleRelease` 直接失败。
@@ -271,6 +271,13 @@ $BT/apksigner verify 目标名.apk
**判定原则**:广告黑名单只作用于**返回地址(媒体 URL)的 host**,
**不作用于"取址入口"的 host** —— 两者不能混为一谈,否则会误杀唯一可用的源。
- 该改动同时把 `KTV_BRIDGE_API` 由 9 提升到 **10**(`ktv_api.js` 两处标记 + `KtvJsBridge` 两处校验)。
- **`a.ktv8.my`(2026-10 加入,置于 `gz.ac16.vip` 之后)**:实测与 `w345.my` **同一台服务器**
(`154.219.102.181`),`GET /` 是主机面板默认页,`i.php` 返回与其它入口**逐字节一致**的
170B 响应(`code=200/end_date=2026-10-05/retry=5`)→ 同一后台的兄弟入口;
它自身媒体路径(`/<编号>.ts`、`/ad_files/…`)均 404 → **不托管广告媒体**。
⚠️ 其 `do.php` 取址行为**尚未定性**(测试时本机出口 IP 配额已被消耗殆尽),
因此置于次位、由运行时自动升降序。
- 该条改动把 `KTV_BRIDGE_API` 由 10 提升到 **11**(同样四处)。
- **⚠️ 取址有两条实现,改协议必须同时改**:JS 主路径(`ktv_api.js`)+ 原生兜底
(`SongUrlResolver.kt`,供 **WebView 不可用**的老盒子使用 —— 实测极米 H1S/GMUI2.0 上
WebView 导不出 `window.KtvApi`,桥永远 not ready,只靠 JS 时表现为
@@ -388,6 +395,13 @@ $BT/apksigner verify 目标名.apk
`APP-INIT ... logFile=<路径>` 指明位置;
4. `MiliLog.init` 已提到 **`KtvApplication.onCreate`**(早于 `MainActivity`),
这样即使更早的初始化抛异常,也已经有日志可查。
- ⚠️ **"所有源都取不到地址"必须给用户一句明确的话(2026-10 用户要求)**:
`Eac19WindowGuard.onAllFailed` ← `noteAllSourcesFailed()`,
由 `SongUrlResolver.resolve()` 在**本轮彻底失败**时调用(403 / 只发广告 / 网络异常都算),
弹窗文案固定为 **「远程源已全部失效,等待新版本修复」**。
它与 `onBlocked`(风控 403 → "换公网 IP")常常同时触发,因此 `onBlocked` 处理器里
用 `lastAllFailedAt()` 做了 60 秒去重,**不允许同时弹两个框**;两者都按 15 分钟节流。
以前这里只有一句"无法生成下载地址"的 toast,用户看着像界面没反应。
- 一段典型现场日志应为:`BOOT` → `STORAGE` → (点歌)`点歌编号=... 请求源=... 状态=成功 urlHost=...`
→ `PLAY ... src=local` → 每 6h `HEALTH ...`;异常时才有 `RAW-ERR`/`NET-ERR`/`NATIVE-SONG ...失败`。
- **网络状态与断网恢复**:`KtvNetworkMonitor`(object,走 `ConnectivityManager` 回调、不轮询)