• v1.4.7 a7a28fc45d

    zijunchiang released this 2026-09-26 17:35:48 +08:00 | 25 commits to master since this release

    麦动KTV V1.4.7

    本版集中修复 极米 H1S(GMUI2.0 / Android 5.1.1 / API 22) 上逐层暴露的兼容性问题。
    该设备此前所有版本都无法打开,本版从闪退一路修到能正常点歌播放。

    修复(按发现顺序,层层叠加)

    1. 一打开就闪退 —— 存储根目录写死为 /storage/emulated/0/MaidongKTV,在这台机器上不可写
      (其外部存储根实际是 /mnt/sdcard)→ 建目录抛异常直接中断启动。
      改为启动时按「外部存储 → 历史路径 → 应用私有外部目录 → 内部目录」真实探测可写性后选定根目录,
      且所有路径一律走运行时 getter(不再编译期内联)。

    2. 无法下载曲库 —— 曲库服务使用 Let's Encrypt 新证书链
      (leaf ← YR2 ← Root YR ← ISRG Root X1),而 network_security_config.xml
      只在 Android 7.0(API 24)+ 生效,5.1.1 上被忽略、系统信任库也没有 ISRG 新根 → 握手失败。
      新增 TlsCompat:API<24 时把「系统信任 ∪ 内置根证书」的复合信任库装到 HttpsURLConnection;
      裸 Socket 通道单独提供同源工厂;WebView 的 SSL 错误不盲目放行,而是用增强信任库对同一主机独立复核。

    3. 下载时卡死 / 极慢 —— 430MB 曲库按 256KB 分块会回调约 1700 次进度,每次都 main.post
      做「改文本 + 改进度 + bringToFront()(整棵视图树重排)」,把主线程队列压满。
      进度改为按最终文案去重(刷新次数降到 ≤100),刷新只做真正变化的事,
      并在解压/校验阶段补上明细进度。

    4. 失败原因误报 —— 「曲库分区空间不足(当前可用 6.04GB)」是误判:ENOSPC 也可能来自
      inode 耗尽/配额/ROM 限制。改为上报完整异常链 + 真实写入探针 + 挂载点信息,
      并清理失败时残留的约 1.4GB 临时文件。

    5. 点歌「无法生成下载地址」 —— 两层原因:

      • 点歌取址的裸 Socket 通道连接阶段没有超时(Socket(host, port) 不受 soTimeout 约束),
        多源叠加会耗光 JS 侧 180 秒预算;HTTPS 分支还用了 SSLSocketFactory.getDefault(),
        绕过了证书补丁。已改为显式连接超时 + 使用增强信任工厂。
      • 更根本:该设备 WebView 不可用(导不出 window.KtvApi),桥永远不就绪,
        取址只能回退数据库 → 必然失败。新增 SongUrlResolver:用原生代码复刻同一套取址协议
        (i.php 取 token → music/do.php 取地址,多源自动排序 + 广告/错号校验),
        走与 JS 完全相同的干净请求通道且不依赖 WebView,作为兜底接入。

    可观测性

    • JS 侧日志(console.log)已桥接进远程日志(JS ...),此前只进 WebView 控制台、现场无法取证。
    • 新增 JS-BRIDGE ...(WebView 就绪/失败)、NATIVE-SONG ...(原生取址过程与结果)、
      MUSE-DB/DB-SYNC ...(曲库同步各步骤)、RAW-ERR/NET-ERR(请求失败)等上报。
    • AGENTS.md 补齐对应约束(API 守卫、存储根运行时解析、老系统 TLS 根证书、高频回调刷 UI、
      裸 Socket 三坑、取址双实现同步)。

    说明

    • versionName 1.4.7 / versionCode 27,签名与历史版本一致,可直接覆盖安装。
    • 双 ABI:armeabi-v7a + arm64-v8a。
    • 首次安装需下载曲库约 430MB(解压后约 1GB),请预留约 1.5GB 可用空间。
    Downloads