ColorOS Live Lyrics Bridge

简体中文

ColorOS Live Lyrics Bridge 是一个基于 LSPosed/libxposed API 102 的模块,用来把受支持音乐播放器的时间轴歌词桥接到 ColorOS/OPlus 锁屏岛-锁屏歌词管线。

项目源码:

https://github.com/Andrea-lyz/ColorOS-Live-Lyrics-Bridge

功能

  • 内置 Salt Player 兼容适配器。
  • 内置 ConePlayer 兼容适配器,包含正式包和 Google Play 包名。
  • 支持播放器主动发布 lyricInfo 接入协议。
  • rawLyric 可用时支持逐字歌词绘制。
  • 优化 ColorOS 锁屏歌词排版、长句换行、重复歌词定位、翻译行识别和切歌显示稳定性。
  • 在官方锁屏歌词 UI 实际可见且仍处于锁屏界面时,阻止屏幕按系统超时时间自动熄灭。
  • 支持锁屏歌词翻译按钮;当 Salt Player 等播放器没有发布旧版桌面歌词 action 时,模块会注入公开翻译开关 action,方便 ColorOS/SystemUI 构建翻译切换按钮。

作用域

本仓库的 SCOPE 文件列出了需要由 LSPosed 启用的静态作用域:

com.salt.music
ink.trantor.coneplayer
ink.trantor.coneplayer.gp
com.android.systemui

Salt Player 和 ConePlayer 属于兼容适配器,需要模块进入播放器进程抓取歌词。com.android.systemui 用于锁屏歌词绘制、翻译按钮显示和屏幕超时保活。

播放器主动接入协议

如果播放器本身已经拥有时间轴歌词,推荐直接在当前媒体会话中发布 MediaMetadata["lyricInfo"] JSON。主动接入的播放器通常不需要加入模块 APK 依赖,也不需要加入 LSPosed 播放器作用域;模块会在 SystemUI 侧从媒体会话中动态识别。

基础 payload 示例:

{
  "songName": "...",
  "artist": "...",
  "songId": "lockscreen-lyrics-...",
  "lyric": "[00:00.00]...",
  "rawLyric": "[00:00.000]word[00:00.120]..."
}
  • lyric:带时间戳的逐行 LRC,用于 ColorOS/OPlus 官方锁屏歌词列表。
  • rawLyric:可选,包含逐字时间轴;提供后模块会启用逐字歌词绘制。
  • 带时间戳的翻译行可以和主歌词一起放入原始歌词数据中,模块会在 SystemUI 侧合并识别。

完整协议、字段说明和 Media3 示例见源码仓库文档:

https://assets.lsposed.org/raw/Andrea-lyz/ColorOS-Live-Lyrics-Bridge/main/docs/PLAYER_INTEGRATION.zh-CN.md?sign=635d6f8b43109a698c0268343e430932&t=6a03bf00

安装

从 Releases 页面下载 APK,在 LSPosed 中按 SCOPE 启用模块,然后重启系统界面或直接重启设备。升级后建议同时重启目标播放器进程,确保播放器侧歌词 hook 与 SystemUI 侧锁屏歌词 hook 都重新加载。

English

ColorOS Live Lyrics Bridge is an LSPosed/libxposed API 102 module that bridges timed lyrics from supported Android music players into the ColorOS/OPlus lock-screen lyric pipeline.

Source repository:

https://github.com/Andrea-lyz/ColorOS-Live-Lyrics-Bridge

Features

  • Built-in Salt Player compatibility adapter.
  • Built-in ConePlayer compatibility adapter, including the formal and Google Play package names.
  • Player-provided lyricInfo integration protocol.
  • Word-level lyric rendering when rawLyric is available.
  • Lock-screen lyric layout, long-line wrapping, repeated-line matching, translation-line recognition, and track-switch stability improvements.
  • Screen timeout keep-awake while the official lock-screen lyric UI is actually visible and the keyguard is still showing.
  • Lock-screen lyric translation button support. When players such as Salt Player do not publish the legacy desktop-lyrics action, the module injects the public translation toggle action so ColorOS/SystemUI can build the translation button.

Scope

The SCOPE file in this repository lists the static LSPosed scope:

com.salt.music
ink.trantor.coneplayer
ink.trantor.coneplayer.gp
com.android.systemui

Salt Player and ConePlayer use compatibility adapters, so the module needs to run inside their player processes to capture lyrics. com.android.systemui is required for lock-screen lyric rendering, translation button visibility, and screen-timeout keep-awake.

Player Integration Protocol

Players that already own timed lyrics should publish a MediaMetadata["lyricInfo"] JSON string in the active media session. A self-integrating player usually does not need to depend on the module APK or be added to the LSPosed player scope; the module detects the current media session dynamically from the SystemUI side.

Basic payload example:

{
  "songName": "...",
  "artist": "...",
  "songId": "lockscreen-lyrics-...",
  "lyric": "[00:00.00]...",
  "rawLyric": "[00:00.000]word[00:00.120]..."
}
  • lyric: timed line-level LRC for the native ColorOS/OPlus lock-screen lyric list.
  • rawLyric: optional word-level timeline; when provided, the module enables word-level rendering.
  • Timed translation lines may be included in the original lyric data and are merged on the SystemUI side.

Full protocol details, field definitions, and Media3 examples:

https://assets.lsposed.org/raw/Andrea-lyz/ColorOS-Live-Lyrics-Bridge/main/docs/PLAYER_INTEGRATION.md?sign=8fd7bedd86edc51be65b91a24e036804&t=6a03bf00

Installation

Download the APK from Releases, enable the module in LSPosed for the packages listed in SCOPE, then restart System UI or reboot the device. After upgrading, also restart the target player process so both player-side lyric hooks and SystemUI-side lock-screen hooks are reloaded.

Releases

6/21/2026, 9:43:44 AM

更新内容

  • 修复部分 Salt Player 构建未发布旧桌面歌词 action 时,ColorOS 锁屏歌词翻译按钮始终不出现的问题;模块现在会向媒体会话播放状态注入公开翻译开关 action。
  • 屏幕超时保活改为 15 秒 SCREEN_BRIGHT_WAKE_LOCK 租约,并在保活期间按 8 秒节奏续租与发送 userActivity,避免自然超时后进入降亮/AOD。
  • 保活证据改为以最近可见的官方锁屏歌词 TextView 为主,刚收到的歌词模型或官方歌词元数据只保留 3 秒过渡窗口,避免播放器异常退出或 OPlus Adapter 未清理时旧模型继续保活。
  • ACTION_USER_PRESENT 后增加 Keyguard 延迟复核:人脸识别成功但仍停留在锁屏歌词页时会恢复保活,真正离开锁屏后立即释放。
  • Release workflow 新增 LSPosed/Xposed 模块仓库同步步骤,发版 APK 会同步发布到 Xposed-Modules-Repo/io.github.andrealtb.lockscreenlyrics

验证

  • 本地已验证 testDebugUnitTestassembleDebuglintDebug
  • 继续保留既有歌词布局、逐字绘制、切歌淡入、翻译识别与翻译按钮恢复逻辑。

升级提示

安装后请在 LSPosed 中确认模块已勾选目标播放器与系统界面,然后重启播放器进程和系统界面;如果刚从旧版升级,建议直接重启设备以确保新版 SystemUI Hook 与屏幕超时策略完整生效。

Assets

1

6/21/2026, 9:36:21 AM

更新内容

  • 新增播放器无关的歌词会话规约器,将异步歌词回调与稳定曲目信息绑定,避免切歌期间把新歌词写入上一首歌曲;同时兼容 Salt Player 的状态栏/车载歌词转发元数据。
  • SystemUI 私有媒体与歌词入口改用 DexKit 动态识别,并保留旧类名回退路径,降低 ColorOS/OPlus 更新或代码混淆带来的失效风险。
  • 在歌词进入 OPlus 官方列表前统一规范化:同一时间戳只保留主歌词 item,翻译与逐字信息继续保留在完整模型中;过滤制作信息、标题歌手行和零宽占位行。
  • 修复部分双语 LRC 被解析为“中文主句、英文翻译”的问题,并增加 Opalite 零宽占位行回归测试。
  • 改进重复歌词、首行预滚动和官方列表位置映射,使用时间戳、规范化文本与出现顺序共同定位当前句。
  • 锁屏歌词采用稳定的 80dp 物理槽位和 6dp 间距;短句视觉密度收紧,长句继续使用两行滑动窗口,当前进度行下移约 48dp
  • 移除按内容动态改变 item 几何的方案,避免每句播放完成时出现挤压、下跳或 RecyclerView 重新测量。
  • 改进 Seedling 播放位置同步、歌词界面可见性恢复、切歌淡入恢复和屏幕超时保活状态更新。
  • 新增适用于中文路径的本地 Gradle 构建脚本,并补充歌词会话、布局策略、LRC 规范化、曲目身份与双语解析测试。

已验证场景

  • Salt Player 不同歌曲连续切换、暂停恢复与进度跳转。
  • 连续短句、长句、翻译行、重复副歌和双语同时间戳歌词。
  • Opalite 中零宽占位行紧邻同时间戳中英歌词的解析场景。
  • 翻译按钮、锁屏超时保活与切歌歌词渐变在播放器重启后的正常恢复。

升级提示

安装后请在 LSPosed 中确认模块已勾选目标播放器与系统界面,然后重启播放器进程和系统界面;建议直接重启设备以确保新版 SystemUI Hook 与 DexKit 缓存完整生效。

Assets

1

6/21/2026, 9:36:16 AM

更新内容

  • 新增 ConePlayer 适配,支持正式版与 Google Play 版,并已跨版本验证 1.1.3、1.1.4 和 1.1.5。
  • ConePlayer 歌词解析入口改由 DexKit 动态识别,不依赖混淆类名;兼容单参数与双参数解析方法。
  • 为未主动提供翻译动作的播放器补充翻译开关,同时保留收藏等已有自定义动作。
  • Salt Player 适配器迁移到 DexKit,通过歌词来源枚举、滚动状态枚举和结果类结构动态定位,已验证 12.0.0 正式版与 alpha07。
  • 调整 lyricInfo 数据优先级:播放器主动增强接入优先,其次使用模块捕获的完整歌词,播放器官方简单 lyricInfo 仅作为兜底。

作用域变化

  • 新增 ink.trantor.coneplayer
  • 新增 ink.trantor.coneplayer.gp
  • 保持 com.salt.musiccom.android.systemui 支持。

升级提示

安装后请在 LSPosed 中确认模块已勾选对应播放器与系统界面,然后重启相关播放器进程和系统界面;若首次安装,建议直接重启设备。

Assets

1

6/21/2026, 9:36:11 AM

更新内容

  • 修复歌词正文存在重复句时,当前句可能无法进入逐字渲染的问题;现在会优先匹配实际播放位置对应的重复句。
  • 修复接入公开翻译开关协议的播放器中,ColorOS Rule0 误把“上一首”显示为翻译按钮的问题。
  • 将翻译动作提升到 Rule0 自定义动作首位,同时保留上一首、播放/暂停和下一首的原有位置与行为。
  • 增加重复歌词匹配和翻译动作排序的回归测试。

播放器接入

  • 继续使用公开动作 io.github.andrealtb.lockscreenlyrics.action.TOGGLE_TRANSLATION,协议本身没有变化。
  • 已接入该动作的播放器无需修改即可获得本次按钮排序修复。

升级提示

安装后请在 LSPosed 中确认模块作用域,并重启系统界面或设备,使新版 SystemUI Hook 生效。

Assets

1

6/21/2026, 9:36:06 AM

更新内容

  • 在保持歌词槽高固定的前提下,将官方歌词行间距收紧至 6dp,避免动态高度引起滚动抖动。
  • 无翻译歌词使用更大的 24sp 字号和均衡换行,按内容显示 2–3 行并保持垂直居中。
  • 过长翻译会随当前歌词进度横向滚动,减少文字超出屏幕边界的问题。
  • 翻译按钮仅在当前歌曲含可用翻译时显示。
  • 优化关闭翻译时从“2 行歌词 + 1 行翻译”过渡到“3 行歌词”的补行动画。

播放器接入

  • 新增公开动作 io.github.andrealtb.lockscreenlyrics.action.TOGGLE_TRANSLATION,主动接入 lyricInfo 的播放器可提供锁屏翻译开关。
  • 自动为外部歌词提供方配置 OPlus Rule0 自定义动作槽位。
  • 播放器包内存在 ic_translation 时优先使用;否则自动采用模块内置的透明背景、单色 Salt 风格翻译图标。
  • 中英文播放器接入文档已补充动作顺序、图标及生命周期要求。

升级提示

安装后请在 LSPosed 中确认模块作用域,并重启系统界面或设备。

Assets

1

v1.5.0

Stable

6/21/2026, 9:36:01 AM

更新内容

  • 引入 Lyrics Core 解析适配层,增强多种时间轴歌词、逐字时序和同时间戳双语歌词兼容性。
  • 新增按曲目缓存与标准化身份匹配,兼容 [Explicit] / [Clean] 后缀及歌词早于媒体元数据到达的情况。
  • 完善锁屏逐字渲染:当前词辉光、焦点过渡、双语排版、长句窗口和可持久保存的翻译开关。
  • 优化切歌衔接,避免闪回官方歌词,并修复行重绑与淡入重复触发造成的 RenderNode 录制异常。
  • 加强首次沉浸界面进入、延迟歌词行绑定、屏幕保活和 OPlus 媒体策略兼容性。
  • 清理未启用的实验钩子与 fallback,减少 SystemUI 全局热路径开销。
  • 更新播放器接入文档:首次元数据应原子携带完整 lyricInfo,避免紧邻 extras 补丁被 OPlus 防抖丢弃。

验证

  • 真机回归测试通过
  • JUnit:7/7
  • Android Lint:通过
  • GitHub Debug 与签名 Release 构建:通过

构建版本:versionName 1.5.0 / versionCode 57

Assets

1

v1.3.0

Stable

6/21/2026, 9:35:46 AM

更新内容

  • 新增播放器主动接入协议:播放器可直接通过 MediaSession lyricInfo 发布歌词,模块会在 SystemUI 侧动态识别,无需加入包名适配器或 LSPosed 播放器作用域。
  • 支持 lyric 基础逐行歌词接入;可选 rawLyric 用于启用模块的逐字高亮渲染。
  • 保留 Salt Player 兼容适配器,其他新播放器推荐优先走 lyricInfo 接入协议。
  • 修复 Salt Player 12.0.0 新版本 hook 失效问题,兼容新版混淆类变化。
  • 优化 Salt 歌词抓取逻辑,自动识别构造器参数中的时间轴歌词,降低版本变动导致失效的概率。
  • 更新中英文接入文档,补充播放器接入方式和推荐发布时机。
  • 去除SystemUI侧包名白名单。[测试]

Assets

1