v3.6.0
ColorOS Live Lyrics Bridge v3.6.0
v3.6.0 新增 Metrolist 的完整 LyricProvider 适配,并修复外部歌词已经成功送达、锁屏原生歌词列表却要等到暂停或继续播放才刷新的问题。本次继续使用 v4 直达协议,不改变既有 Provider 的准入和兼容方式。
Bridge
- 在静态外部歌词注册表中加入
lyricprovider/metrolist-music与宿主包名com.metrolist.music的固定绑定,支持 Provider 上报播放状态、曲目 generation 和当前曲目权威信息。 - Metrolist Provider 的 v4 广播仍按完整 source、playerPackage、senderPackage 与 senderKind 规则校验;未知来源、宿主不匹配和旧协议不会被动态放行。
- 修复部分首次播放或切歌场景:Bridge 已经接收并提升有效歌词模型,但 ColorOS SystemUI 的官方
LyricsRecyclerView仍为空,只有暂停或继续播放触发元数据重载后才出现歌词。 - 外部歌词提升成功后,Bridge 现在会在验证播放器包名、当前曲目和上下文时效后,有限次重放最近一次 SystemUI 原生歌词加载事务,让官方列表及时填充。
- 重放逻辑是通用外部歌词恢复流程,不依赖 Metrolist 包名分支,也不会强制
setAodModeStyle、延迟首次 RecyclerView prime,或扩大普通TextViewHook 范围。 - 新增 Metrolist v4 fixture、source/host 准入测试和 canonical enhanced-LRC 逐字解析测试。
Metrolist LyricProvider
- 新增独立的
LyricProvider-Metrolist,作用域为com.metrolist.music。Provider 从 Metrolist 当前媒体模型取得歌曲 ID、标题、歌手、专辑和秒级时长,并转换成 Bridge 所需的毫秒级媒体身份。 - Metrolist是适用于安卓系统的第三方 YouTube Music 客户端,它将作为替代适用于对 YouTube Music 的适配而发布。
- Provider 读取 Metrolist 的
files/datastore/settings.preferences_pb,解析LyricsProviderOrderKey与供应商启用状态,保持用户配置的相对顺序,不再使用猜测路径或扫描 protobuf 可打印字符串。 - 当前实现依次支持 BetterLyrics、LrcLib 与 KuGou。BetterLyrics 使用标题、歌手、时长和专辑参数;LrcLib 接收
album_name;KuGou 搜索词也包含专辑信息,减少错误候选。 - BetterLyrics TTML 会保留毫秒级行时间、逐字 span、结尾时间、
audio lyricOffset和真实单词边界。无空白的相邻拉丁 span 会先合并为同一单词,修复call ing、a lone、mega phone等错误空格;CJK span 仍保持独立逐字时间。 - KuGou 优先下载并解析 KRC 逐字歌词,生成标准
[行时间]<词时间>文本...<结束时间>enhanced LRC;仅在 KRC 不可用时回退逐行 LRC。 - 首次播放和切歌搜索绑定当前 track generation。切歌会取消旧任务及正在进行的 OkHttp 请求,每个供应商具有独立 8 秒超时,过期结果不会覆盖新曲。
- 修复 Hooker 在 zygote 初始化阶段提前创建主线程 Handler 导致的初始化失败,以及发送前歌词清洗正则异常。主线程对象现在延迟到真实应用回调中创建。
- Provider 继续保留 Lyricon 的正常
player.setSong/ playback state 路径,并在同一当前曲目校验后发送 Bridge v4 payload。
诊断与文档
- 新增统一的 Bridge / Provider 日志抓取说明与脚本,明确
adb logcat -s只过滤输出,不能开启Log.isLoggable控制的调试日志。 - Provider 日志现在区分曲目识别、供应商顺序、命中来源、
timing=word|line、行内时间标签数量、v4 发送和 Bridge 接收阶段,便于定位“搜索成功但未发送”或“已接收但未填充官方列表”。 - Provider 适配文档补充 DataStore、异步 generation、逐字格式、TTML 单词边界、KRC 回退和可取消网络请求等门禁。
兼容与验证
- Bridge 全量
testDebugUnitTest与assembleDebug通过。 - Metrolist Provider
testDebugUnitTest与assembleDebug通过;测试覆盖 DataStore protobuf、供应商顺序与超时、BetterLyrics TTML、KuGou KRC、enhanced-LRC 清洗和 v4 payload。 - Android 16 实机验证通过首次播放、连续切歌、暂停恢复、供应商优先级、BetterLyrics 专辑匹配、KuGou KRC 逐字时间和拉丁音节合并。
- 实机日志确认 Bridge 能接收并提升 Metrolist 文档、重放 SystemUI 元数据歌词加载、生成非零 RecyclerView
itemCount并完成首次 prime,无需再手动暂停或继续播放。 - Salt Player、ConePlayer 和已有 8 个 LyricProvider 的适配方式保持不变;外部歌词协议版本仍为 v4。本次不调整已知良好的 AOD 切换时序和官方歌词几何策略。
升级说明
- Metrolist 用户需要同时安装同一 Release 中的
ColorOS-Live-Lyrics-Bridge-v3.6.0.apk与LyricProvider-Metrolist-v3.6.0.apk。 - 在 LSPosed 中启用 Metrolist Provider,并只勾选 Metrolist 作为作用域;随后强行停止并重新打开 Metrolist。首次安装或作用域变化后建议重启设备。
- 已使用其他播放器的用户可以直接更新 Bridge;原有 Provider 的作用域和使用方式无需改变。Bridge 与 Provider 应来自同一 Release。
- Metrolist Provider 当前发送原文逐字或逐行歌词,不生成歌词源未提供的翻译。
Release 资产
ColorOS-Live-Lyrics-Bridge-v3.6.0.apkLyricProvider-Metrolist-v3.6.0.apkLyricProvider-QQMusic-v3.6.0.apkLyricProvider-163Music-v3.6.0.apkLyricProvider-AppleMusic-v3.6.0.apkLyricProvider-Poweramp-v3.6.0.apkLyricProvider-Spotify-v3.6.0.apkLyricProvider-QiShui-v3.6.0.apkLyricProvider-KuGou-v3.6.0.apkLyricProvider-LXMusic-v3.6.0.apkLyricProvider-v3.6.0.zip
Provider 为独立 LSPosed 模块,只需安装自己使用的播放器对应 APK。
