Skip to content

v3.5.0

Choose a tag to compare

@Andrea-lyz Andrea-lyz released this 25 Jul 13:44

ColorOS Live Lyrics Bridge v3.5.0

v3.5.0 把 v4 外部歌词协议补到可在长歌词场景稳定运行的形态:Bridge 与 Provider 各自新增并对齐了大小限制常量,Provider 侧加入逐行截短重试,LyricInfoContract 支持纯逐字歌词走完整流水线;这一版本同时收紧 BridgePayloadGate 的去重窗口并把 LockscreenLyricsModule 的渲染/时序逻辑拆到独立类,便于后续按层迭代。

Bridge

  • LyricInfoContract.parse 现在接受 lyric 字段为空、rawLyric 含时间戳的 payload:纯逐字歌词会被视为合法 lyric 进入流水线,原始 rawLyric 仍按字渲染路径使用,避免 Provider 主动把逐字降级成逐行后丢字。
  • external-lyric-protocol 新增大小限制常量 MAX_LYRIC_FIELD_CHARS = 1_500_000MAX_TOTAL_LYRIC_CHARS = 3_000_000MAX_METADATA_FIELD_CHARS = 16_384MAX_PARCEL_BYTES = 512 KiB,与 Provider 端 ExternalLyricV4Protocol 同名常量镜像;Bridge 端按字符、Provider 端按 Parcel 字节校验,数字差异由两端的度量单位差异解释,并显式写在常量注释中。
  • 新增独立的 LyricTimingTuningConstantsrender/ 子包,把渲染与时序调整从 LockscreenLyricsModule 拆出;模块类体不再直接承载逐字进度、扫光、首句清理与时序微调逻辑,便于单独 review 与单元测试。
  • 文本匹配、清理与核心 adapter 配合协议层变更同步更新:LyricTextMatchPolicyLyricTextSanitizerLyricsCoreAdapterExternalLyricIngress 调整接收侧数据形态与默认值。
  • app/build.gradle.kts 开启 testOptions.unitTests.isReturnDefaultValues = true,方便本地单元测试在不依赖 Android 桩时通过运行。
  • Bridge 端 README 中英文版同步更新 Provider 安装与常见问题说明。

LyricProvider

  • share/extensions-androidSystemUiBroadcastSender 新增 submitWithLyricLineFallback:当标准 submit 流程因 payload 超大被 SystemUI 拒收(且行级降级后仍超限),会调用 LyricLineTruncator 对三个 lyric extras 做一次有界、按字节预算的中间行截短并重试;retry 时会以调用方传入的原始 lyric/rwLyric/translationLyric 为输入,避免在已降级字符串上重复裁剪。MAX_PARCEL_BYTES 改为引用 ExternalLyricV4Protocol.MAX_PARCEL_BYTES,统一阈值来源。
  • share/extensions-kt 新增 LrcTimeFormatterTrackKeyBuilderLyricLineTruncatorWordTimeNormalizerProviderDiagnostics 等桥接辅助类,分别承担时间格式化、track key 计算、行截短预算、逐字时间归一化与 Provider 端诊断输出;现有 BridgeEventGates.BridgePayloadGate 由单 key 改为 ArrayDeque<Entry> 的多键 LRU,默认保留最近 8 条 30 秒窗口内的 key,支持按 key 主动 forget,避免跨曲目共用同一去重 slot。
  • QQ 音乐、网易云音乐、Apple Music、Spotify、汽水音乐与酷狗音乐 Provider 的 SaltLyricBridge 同步切换到 submitWithLyricLineFallback:当 lyric 为空但 rawLyric 含时间标签时仍把 rawLyric 作为 lyric 兜底,并把 TrackKeyBuilder / WordTimeNormalizer / LrcTimeFormatter 等辅助接入主流程;QQ 音乐与 Spotify 同时把增强 LRC 与纯 LRC 分别装入 rawLyric / lyric,避免时间信息丢失。
  • 酷狗音乐 Provider 移除 KuGouOriginalMediaMetadataPolicy,原职责并入 KuGouOriginalLyricCandidatePolicy:取消"临时车机歌词元数据"覆盖专辑封面路径,恢复真实专辑封面,并修复同曲不同标题版本互相切换时偶发的"暂无歌词"或歌曲信息串用。
  • share/krckitshare/qrckitshare/yrckit 中的 KRC/QRC/YRC parser 与语言识别器微调:保持现有 API,仅修正对部分边界(极短行、空逐字、单次消费)解析的稳定性;QQ QRC 翻译对齐仍使用共享扩展层的有界一对一匹配,不退回逐行 findClosest
  • 新增与本次改动配套的单测:ProviderDiagnosticsTestExternalLyricV4ProtocolSizeLimitsTestLrcTimeFormatterTestLyricLineTruncatorTestTrackKeyBuilderTestWordTimeNormalizerTestYrcParserTest 及更新后的 BridgeEventGatesTest

本次有内部版本更新的 Provider:网易云音乐 1.1.6、QQ 音乐 1.1.6、Apple Music 1.1.4、Spotify 1.1.6、汽水音乐 1.2.6、酷狗音乐 1.1.9。Poweramp 与 LX Music 本次没有 Provider 侧改动,但 Release 工作流仍会构建它们的 APK 以保持 ZIP bundle 完整。

升级说明

  • 请将 Bridge 与正在使用的 Provider 从本次 Release 一起更新;升级后重启设备,或至少重启 SystemUI 与对应播放器进程。
  • 如果你使用的 Provider 在 v3.5.0 之前曾因歌词过大被 SystemUI 拒绝,现在会自动通过逐行截短重试一次;如仍失败,请导出 LSPosed 日志并按 [BRIDGE_GATE][SystemUiBroadcastSender][LyricLineTruncator][ProviderDiagnostics] 关键字定位日志。
  • AOD 首次 attach、prime、槽高、官方行缩放与低刷新切换路径继续沿用 v3.3.0 起的已验证基线,本次未引入新的 AOD 可见性、透明度、尺寸或 readiness 门控。

验证

  • Bridge:testDebugUnitTestassembleDebuglintDebug、LSPosed metadata 校验与 git diff --check 通过。
  • LyricProvider:根项目 testDebugUnitTest 通过;新增的协议大小限制、桥接工具类与 Parser 单测全部覆盖;BridgePayloadGate LRU 行为已通过更新后的 BridgeEventGatesTest 覆盖。
  • Provider 发布包通过 Bridge workflow 同一 tag(v3.5.0)一次性构建:Bridge 主 APK + 8 个 Provider APK + LyricProvider-v3.5.0.zip 一起上传到 GitHub Release 与 LSPosed 仓库。

Release 资产

  • ColorOS-Live-Lyrics-Bridge-v3.5.0.apk
  • LyricProvider-QQMusic-v3.5.0.apk
  • LyricProvider-163Music-v3.5.0.apk
  • LyricProvider-AppleMusic-v3.5.0.apk
  • LyricProvider-Poweramp-v3.5.0.apk
  • LyricProvider-Spotify-v3.5.0.apk
  • LyricProvider-QiShui-v3.5.0.apk
  • LyricProvider-KuGou-v3.5.0.apk
  • LyricProvider-LXMusic-v3.5.0.apk
  • LyricProvider-v3.5.0.zip

Provider 为独立 LSPosed 模块,只需安装自己使用的播放器对应 APK。汽水音乐用户仍需在 LSP 管理器中为汽水音乐启用"还原内联钩子",并按管理器提示处理 libart.so

Donate

WeChat and Alipay donation QR code