Repository navigation
v4.5.3
ColorOS Live Lyrics Bridge v4.5.3
v4.5.3 是 realme UI7 锁屏歌词稳定性更新,修复切歌、展开歌词或亮屏后先短暂显示官方渲染的问题,并修复设置回执异常、UI7 歌词行布局适配和字符上浮动画切换实时行时先整体下沉。Bridge 是本次唯一有业务代码变化的组件;14 个歌词 Provider 与动态封面 Provider 1.0.6 的代码和内部版本不变,只有套件资产文件名更新到 4.5.3。
锁屏歌词
- realme UI7 可能在完整逐字报文之前先送来带定时文字的 native-only 更新。Bridge 现在会直接使用当前报文的逐行时间建立自绘模型;完整逐字数据到达后再切换为逐字模式,不再先清空模型、露出约一秒官方渲染。
- 同曲刷新仍优先保留已经绑定身份的完整逐字模型。播放器、观察曲目、songId 或 generation 明确冲突时不会复用旧模型,而是为当前报文建立独立模型,避免串曲。
- UI7 歌词 RecyclerView 的精确字段布局按 u:I 行距、v:J 滚动时长、B:F 非活动行缩放完成适配,恢复 Bridge 对行距、滚动和缩放的稳定控制。
- 修复启用“字符上浮动画”时,下一行成为实时行会先整体下沉 240ms、再随逐字进度上浮的问题;待唱行提前保持零进度位置,切换时直接衔接上浮。
- 切歌过渡改为整次渲染交接:主线程一起发布歌词模型、完整原生列表期待和 renderer 缓存;实际列表提交、行绑定与布局一致后再整批绘制,避免旧列表中的共有制作信息混用新曲模型、单独残留数行。异步列表只读取已提交数据,未重绑的未变行也须在整份新列表确认后迁移。
设置与诊断
- 修复部分设置页保存回执在 SystemUI 解包时触发 BadParcelableException 的问题。回执改用框架 ResultReceiver 代理,不再依赖被 R8 合并或改名的 App 子类。
- 新诊断区分模型解析/发布、原生列表提交、整批绘制提交、清空、同曲保留、原生逐行接管、交接超时和绘制回退。日志不输出完整歌词、原始稳定媒体 ID 或私人路径。
- Debug 日志仍默认关闭,开关只改变日志状态,不参与 Hook、取词、模型发布或绘制门禁。
- 修复正式混淆包的宿主 adapter 识别:从 SystemUI 自己的实际类型与方法签名发现绑定入口,避免 R8 把外部类名改成模块内部混淆名,导致自绘、翻译与高亮整条链路回退原生。
兼容矩阵与升级
Bridge 继续只作用于 system 和 com.android.systemui,不进入播放器进程,也不依赖 Provider 安装。Provider 仍通过播放器自己的 MediaSession MediaMetadata["lyricInfo"] 发布歌词。
| Provider | 版本 | Provider | 版本 |
|---|---|---|---|
| Salt | 1.1.2 (8) | Cone | 1.1.2 (4) |
| KuWo | 1.2.2 (5) | LX | 1.2.1 (4) |
| Poweramp | 1.2.1 (4) | Metrolist | 1.2.1 (4) |
| 酷狗 | 1.2.4 (7) | QQ 音乐 | 1.2.1 (4) |
| 网易云 | 1.2.1 (4) | Apple Music | 1.2.1 (4) |
| Spotify | 1.1.2 (4) | 汽水音乐 | 1.1.2 (4) |
| 通用播放器 | 1.1.2 (4) | Readify | 1.0.2 (3) |
| 动态封面(独立应用) | 1.0.6 (10) |
- 可直接覆盖安装 Bridge 4.5.3;Bridge 作用域保持 system 与 com.android.systemui。
- 歌词 Provider 与动态封面 Provider 无需为本次修复重装;本 Release 中的歌词 Provider 文件名是 v4.5.3,内部版本与 v4.5.2 相同。
- 同一播放器只开一个 Provider:专属 Provider 与通用播放器 Provider 二选一,同时开启会互相覆盖 lyricInfo。
- Debug 签名测试包不能覆盖正式签名包,需要先卸载。从 4.0 或更早版本升级前,仍建议在 Bridge 中完成配置备份。
验证与已知限制
- 本地 Bridge 门禁通过:866 项单元测试中 860 项通过、6 项既有外部样例条件测试跳过、0 失败/错误;assembleDebug 成功,Debug/Release lint 均无错误,git diff --check 通过。宿主 adapter 契约、完整数据、事务归属、真实 Android View 及 native Canvas 共 57 项相关回归全部通过。
- 用户已用修复后的测试包在 realme UI7 设备确认:锁屏切歌时先显示官方渲染的问题已修复;同一修复覆盖此前“展开歌词/亮屏”也能触发的路径。
- 用户于 2026-10-25 确认最终正式签名 RC4 测试通过,切歌效果满意,切换过程中没有歌词残留。
- RC4 已经过 R8、lint、正式签名和独立资产校验,并检查过实际混淆 APK 中的宿主类型识别路径;设备验收对应这份签名候选包,debug 构建通过不能替代真机结论。
- 兼容性仍取决于厂商 SystemUI 版本和播放器通过 MediaSession 提供的歌词、翻译与进度数据。没有逐字标签的歌词只会使用逐行进度。
资产
正式 Release 包含 19 项已验证资产:1 个 Bridge APK、14 个歌词 Provider APK、1 个动态封面 Provider APK、1 个歌词 Provider ZIP、release-assets-v4.5.3.json 和 SHA256SUMS。Provider ZIP 只包含 14 个顶层歌词 Provider APK;动态封面 Provider 作为独立资产提供。
致谢
感谢提供 realme UI7 SystemUI 样本、录屏和分阶段 LSPosed 日志,并完成锁屏复测的用户。
English
v4.5.3 is a stability release for realme UI7 lock-screen lyrics. It removes the brief official-rendering flash after a track change, when the lyric page expands, or when the screen wakes. It also fixes settings receipt exceptions, UI7 lyric-row layout compatibility, and the downward dip when the character float-up animation activates the live row. Bridge is the only component with business-code changes. The 14 lyric Providers and Dynamic Artwork Provider 1.0.6 keep their code and internal versions; only suite asset file names move to 4.5.3.
Lock-screen lyrics
- realme UI7 can publish a native-only timed update before the full raw word-timing packet arrives. Bridge now builds a custom line-timed model directly from the timed display text in the current packet, then switches to word timing when the raw source arrives. It no longer clears the model and exposes the official renderer for about a second.
- A complete identity-bound word model is still retained for a same-track refresh. An explicit player, observed-track, songId, or generation conflict prevents reuse; Bridge renders the current packet instead and never reuses a model across tracks.
- The exact UI7 LyricsRecyclerView layout is bound with u:I line spacing, v:J scroll duration, and B:F inactive-row scale, restoring stable spacing, scrolling, and scaling.
- With character float-up enabled, the next row no longer dips for 240ms before becoming the live row. Upcoming rows already use the zero-progress position and continue directly into the reveal.
- Track transitions now commit a complete render transaction. The UI thread publishes the model, expected native dataset, and renderer-cache reset together. Pixels are emitted as one batch only after the committed native list, actual row bindings, and geometry agree, preventing shared credits in the old list from being rendered with the new model. Asynchronous lists use their committed data; unchanged rows can migrate only after the complete new dataset is confirmed.
Settings and diagnostics
- Settings save receipts no longer depend on an R8-merged App ResultReceiver subclass that could fail during SystemUI unmarshalling. The six affected settings activities now use a framework ResultReceiver proxy around the Binder write.
- Diagnostics distinguish model parsing/publication, native-dataset commits, pixel-batch commits, clearing, same-track retention, native line-timed takeover, handoff timeout, and draw fallback. They omit complete lyrics, raw stable media IDs, and private paths.
- Debug logging remains off by default and does not gate hooks, lyric acquisition, model publication, or drawing.
- Release builds discover adapter binding through SystemUI's actual types and method signatures. This prevents R8 from replacing a host class-name comparison with the module's own obfuscated AndroidX name and disabling custom rendering, translations, and highlights.
Compatibility and upgrade
Bridge still runs only in system and com.android.systemui. It does not enter player processes or depend on a Provider being installed. Providers continue to publish through the player's own MediaSession MediaMetadata["lyricInfo"].
| Provider | Version | Provider | Version |
|---|---|---|---|
| Salt | 1.1.2 (8) | Cone | 1.1.2 (4) |
| KuWo | 1.2.2 (5) | LX | 1.2.1 (4) |
| Poweramp | 1.2.1 (4) | Metrolist | 1.2.1 (4) |
| KuGou | 1.2.4 (7) | QQ Music | 1.2.1 (4) |
| NetEase | 1.2.1 (4) | Apple Music | 1.2.1 (4) |
| Spotify | 1.1.2 (4) | QiShui | 1.1.2 (4) |
| Universal | 1.1.2 (4) | Readify | 1.0.2 (3) |
| Dynamic Artwork (standalone app) | 1.0.6 (10) |
- Install Bridge 4.5.3 over the previous release. Keep its scope at system and com.android.systemui.
- Lyric Providers and the Dynamic Artwork Provider do not need a reinstall for this fix. Lyric Provider files in this Release are named v4.5.3 and keep the v4.5.2 internal versions.
- Enable one Provider per player. A dedicated Provider and the Universal Provider overwrite each other's lyricInfo when both are on.
- A debug-signed build cannot replace a release-signed install; uninstall it first. A configuration backup is still recommended before upgrading from 4.0 or older.
Verification and limits
- Local Bridge gates passed: 860 of 866 unit tests passed, 6 existing external-fixture conditional tests skipped, with 0 failures or errors; assembleDebug succeeded, Debug/Release lint reported no errors, and git diff --check passed. All 57 focused host-adapter, dataset, transaction, real-View, and native-Canvas regressions passed.
- The user confirmed the fixed test build on a realme UI7 device: the official-rendering flash on lock-screen track changes is gone. The same repair covers the previously reproducible lyric-expansion and screen-wake paths.
- On 2026-10-25, the user accepted the final release-signed RC4: testing passed, track transitions were satisfactory, and no lyric residue appeared during switching.
- RC4 passed R8, lint, formal signing, and independent asset verification, including inspection of host-type discovery in the actual minified APK. Device acceptance applies to this signed candidate; a debug build does not establish device behavior.
- Compatibility still depends on the vendor SystemUI build and on the lyrics, translations, and position data exposed by each player through MediaSession. Lyrics without word tags use line progress only.
Assets
The formal Release contains 19 verified assets: one Bridge APK, 14 lyric Provider APKs, one Dynamic Artwork Provider APK, one lyric Provider ZIP, release-assets-v4.5.3.json, and SHA256SUMS. The Provider ZIP contains only the 14 top-level lyric Provider APKs; the Dynamic Artwork Provider is a separate asset.
Thanks
Thanks to the user who supplied the realme UI7 SystemUI sample, screen recording, staged LSPosed logs, and lock-screen acceptance.
