HyperGlow CN+

Animated lock screen and always-on display lyrics for HyperOS 3, with support for Chinese music apps. HyperOS 3 的锁屏与息屏(AOD)歌词动画,支持国内音乐软件。

Requires root, LSPosed and a lyrics source (Spicy EX, Lyricon, SuperLyric or LyricInfo). 需要 root、LSPosed 以及一个歌词源(Spicy EXLyriconSuperLyricLyricInfo)。


English / 英文

Features

  • Lyrics on the HyperOS lock screen and AOD from multiple sources:

    • Spicy EX (Spotify, international).
    • Lyricon (popular Chinese music apps — QQ Music, NetEase Cloud Music, Kugou, etc.).
    • SuperLyric (active-line push via Binder, works with many music apps).
    • LyricInfo (injects elrc/lrc lyrics into the media session metadata of supported apps).
  • Line-, word- and syllable-synchronized karaoke.

  • Transliteration and translation with Spicy EX Full.

  • AOD clock placement and burn-in movement.

  • Keep AOD active while lyrics are visible.

  • Keep the lock screen awake while music is playing.

  • Raise to show AOD instead of the full lock screen.

Requirements

  • Rooted HyperOS 3.
  • LSPosed.
  • At least one lyrics source:
    • Spotify with Spicy EX Lite or Full (Publish lyrics to HyperGlow enabled).
    • A Chinese music app with Lyricon active in SystemUI.
    • SuperLyric active in the system service.
    • LyricInfo active in the music app, plus notification access for HyperGlow.

Install

APK from Releases.

Tip

Also available on the LSPosed Modules Repository under HyperGlow CN+ (com.aodianjun.hyperglow.cnplus), which tracks each release automatically.

  1. Enable HyperGlow in LSPosed.
  2. Enable your lyrics source:
    • Spotify: enable Spicy EX for Spotify in LSPosed, then enable Publish lyrics to HyperGlow in Spicy EX.
    • Chinese music apps: enable Lyricon for SystemUI in LSPosed.
    • SuperLyric: enable SuperLyric in LSPosed.
    • LyricInfo: enable LyricInfo for the music app in LSPosed, and grant HyperGlow notification access.
  3. Set HyperGlow battery usage to No restrictions.

Note

Tested on Redmi K80 Pro. Will eat battery. Raise to show AOD requires the system Raise to wake option enabled.

Known issues

  • Only tested on Redmi K80 Pro; other Xiaomi models or SystemUI versions may behave differently — submit a compatibility report from the app.
  • The LSPosed module repository syncs on release edits; if a new version does not appear, edit the release body (not just the assets) to retrigger the bot.
  • Experimental mode on unsupported SystemUI versions may cause rendering glitches — disable it if lyrics look wrong.

Build

JDK 21 and an Android SDK are required. No credentials or accounts are needed — every dependency resolves from Google's Maven repository and Maven Central.

JAVA_HOME=/path/to/jdk21 ./gradlew :app:testDebugUnitTest :app:assembleDebug

That produces an installable debug APK under app/build/outputs/apk/debug/. Released builds are signed with a private key that is not in this repository, so a build from source will not share the signing lineage of the published releases: installing your own build over a release requires uninstalling first, and the LSPosed module has to be re-enabled afterwards.

Contributing

Read the specs in docs/ before changing behavior — ARCHITECTURE.md for process boundaries and trust, LOCKSCREEN_AOD_BEHAVIOR_SPEC.md for lockscreen/AOD visibility, lifetime, and power rules, STYLE_GUIDE.md for conventions. They are the contract; code that contradicts them is a bug even when it works.

This repository is generated from a private working repository, so a few things are worth knowing before opening a pull request:

  • Changes are limited to what exists here. A pull request that adds files outside this tree cannot be integrated as written.
  • README.md, FAQ.md, and .gitignore are generated. Edits to them are lost; raise the change in an issue instead.
  • Every accepted change is verified on the maintainer's device before release. Unit tests passing is necessary, not sufficient — anything touching SystemUI hooks, AOD power, or geometry needs hardware verification that cannot run in CI.
  • Large or architectural changes are worth discussing in an issue first, so the design can be checked against the specs before you build it.

License

GPL-3.0. See NOTICE.


中文 / Chinese

功能特性

  • 通过多种来源在 HyperOS 锁屏与 AOD 上显示歌词:

    • Spicy EX(国际版,Spotify)。
    • Lyricon(热门国内音乐软件 —— QQ音乐、网易云音乐、酷狗音乐等)。
    • SuperLyric(通过 Binder 实时推送当前歌词行,支持众多音乐软件)。
    • LyricInfo(向受支持应用的媒体会话元数据注入 elrc/lrc 歌词)。
  • 支持逐行、逐词、逐音节同步的卡拉OK。

  • 搭配 Spicy EX Full 支持音译与翻译。

  • AOD 时钟位置与防烧屏位移。

  • 歌词显示时保持 AOD 常亮。

  • 播放音乐时保持锁屏常亮。

  • 拿起手机显示 AOD 而非完整锁屏。

环境要求

  • 已 root 的 HyperOS 3。
  • LSPosed
  • 至少一个歌词源:
    • Spotify + Spicy EX Lite 或 Full(需开启 将歌词发布到 HyperGlow)。
    • 国内音乐软件 + Lyricon(在 SystemUI 作用域启用)。
    • SuperLyric(在系统服务中启用)。
    • LyricInfo(在音乐软件中启用,并为 HyperGlow 授予通知使用权)。

安装

Releases 下载 APK。

Tip

也已在 LSPosed 模块仓库上架(HyperGlow CN+,包名 com.aodianjun.hyperglow.cnplus),会自动同步每个新版本。

  1. 在 LSPosed 中启用 HyperGlow。
  2. 启用你的歌词源:
    • Spotify:在 LSPosed 中为 Spotify 启用 Spicy EX,然后在 Spicy EX 中开启 将歌词发布到 HyperGlow
    • 国内音乐软件:在 LSPosed 中为 SystemUI 启用 Lyricon
    • SuperLyric:在 LSPosed 中启用 SuperLyric
    • LyricInfo:在 LSPosed 中为音乐软件启用 LyricInfo,并为 HyperGlow 授予通知使用权。
  3. 将 HyperGlow 的电池使用设置为 无限制

Note

已在 Redmi K80 Pro 上测试。 会比较耗电。 拿起显示 AOD 需要系统开启 抬起唤醒 选项。

已知问题

  • 仅在 Redmi K80 Pro 上测试过;其他小米机型或 SystemUI 版本可能表现不同 —— 请从应用内提交兼容性报告。
  • LSPosed 模块仓库在编辑 release 时同步;如果新版本未出现,编辑 release 正文(而非仅更新资产)以重新触发 bot。
  • 在不受支持的 SystemUI 版本上开启实验模式可能导致渲染异常 —— 如歌词显示异常请关闭实验模式。

构建

需要 JDK 21 与 Android SDK。无需任何凭据或账号 —— 所有依赖均从 Google 的 Maven 仓库和 Maven Central 解析。

JAVA_HOME=/path/to/jdk21 ./gradlew :app:testDebugUnitTest :app:assembleDebug

该命令会在 app/build/outputs/apk/debug/ 下生成可安装的调试 APK。正式发布版使用不在本仓库中的私钥签名,因此从源码构建不会与已发布版本共享签名链:用自己构建的版本覆盖安装正式版需要先卸载,之后还需要在 LSPosed 中重新启用模块。

参与贡献

在改动行为之前,请阅读 docs/ 中的规范 —— ARCHITECTURE.md 说明进程边界与信任、LOCKSCREEN_AOD_BEHAVIOR_SPEC.md 说明锁屏/AOD 的可见性、生命周期与电源规则、STYLE_GUIDE.md 说明代码约定。它们是约定;与它们相矛盾的代码即使能用也是 bug。

本仓库由私有工作仓库生成,提交 Pull Request 前有几件事值得了解:

  • 改动仅限于本仓库已有的内容。新增超出本目录文件的 PR 无法按原样合并。
  • README.mdFAQ.md.gitignore 为自动生成,对它们的修改会被丢弃;请改为在 issue 中提出。
  • 每个被接受的改动在发布前都会在维护者的设备上验证。单元测试通过是必要条件而非充分条件 —— 任何涉及 SystemUI 挂钩、AOD 电源或几何布局的改动都需要无法在 CI 中运行的硬件验证。
  • 大型或架构性改动值得先在 issue 中讨论,以便在动手前对照规范检查设计方案。

许可证

GPL-3.0。参见 NOTICE

Releases

9/6/2026, 11:35:16 PM

安装包用途说明

  • hyperglow-cnplus-release-v0.3.82-109.apk(正式版):正常使用请安装此版本。正式签名、R8 压缩,适合日常安装使用。
  • hyperglow-cnplus-debug-v0.3.82-109.apk(调试版):提 issue 反馈问题时请安装此版本,可提供详细诊断日志辅助排查。调试签名,仅用于测试与问题排查,请勿作为日常版本长期安装。

更新日志 (v0.3.82 / versionCode 109)

🌟 修复 AOD 切歌后整首无歌词(issue #11)

  • 根因(0.3.81 实机日志确认):网易云共享内存的位置不是逐帧写入,而是按 base 元组 + 墙钟 × 速度 公式续算,Doze 冻结的是 base 更新。切歌后写入端仍停在旧歌时间线上续算,位置持续动态越界递增(实测 487520ms → 528687ms,新歌时长仅 188718ms)。0.3.81 的越界钳制把每个越界值钳到歌尾并清空歌词行——整首歌 AOD 纯色背景无歌词,并伴随 60Hz capping 日志刷屏;亮屏/切歌/seek 唤醒写入端后才恢复。
  • 同一 bug 的另一种表现:旧歌比新歌时,残留落在新歌时长内、被当成真实位置接受,歌词整段错位(显示在"偏移=旧歌时长"处的新歌歌词)。
  • 修复
    • 切歌可信门控:切歌后首个真实位置必须 ≤ 切歌后墙钟 × 观测速率 + 10s 容差,否则视为旧时间线残留拒绝、从 0 外推(新歌正确推进到歌尾);首个可信值或 seek 后开门恢复正常追踪。上界速率由残留增量估计(残留与真实位置同速推进),1.25x~3x 倍速播放不受影响;冻结型残留记首值持续拒绝,防上界随墙钟增长后被误接受。
    • 越界值视为 stalled:超过歌长 +2s 容差的位置一律不可信,从最后可信基准外推到投影歌尾、再按既有语义稳定占位——取代 0.3.81 直接钳歌尾清行;小幅越界(元数据时长略小于实际音频)仍钳到歌尾;capping 日志去重消除刷屏。
    • 正常播放 / 暂停 / seek / 单曲循环行为不变(门控只作用于切歌后首个可信值之前),issue #3/#9/#10 的修复全部保持。
  • 新增回归测试:时长内残留拒绝与冻结残留、2x 速率跟踪、越界残留外推等;全部 554 个测试通过。

🔄 同步上游 hyperglow 更新(amarinne/hyperglow)

  • 中文歌拒绝错误的日语假名注音(上游 8422d78):数据源(网易云)常给中文歌词错误标注日语 furigana,显示出来既难看又误导。现在中文歌(zh / zh-Hant 等)检测到 ruby 注音含日语假名(平/片假名)时,拒绝显示注音和罗马音;日语歌的假名注音是正确数据,原样保留。文档语言标签从歌词数据贯通到投影层。
  • 版本锁定退役,新设备不再被误报"不支持"(上游 6216fdc):移除 SystemUI/AOD 版本号白名单门禁,改为按符号探测实际解析出的能力判断——有可用 surface 即"可用",UI 显示"n/16 个挂钩可用"计数而非旧的置信度标签。修复新 HyperOS 设备明明能跑却被显示为"不支持配置文件"、诊断报告误报 setup failed 的问题。本地实验模式覆写逻辑保持不变。
  • 诊断报告接受 "available" 状态(上游 c5b1ffa):与新状态机配套的校验放行,避免诊断报告被拒收。
  • fillEndMs 允许越过本行行尾(跨行填充是合法数据),渲染端钳制行窗口防止行级扫光越界。
  • 全部 564 个测试通过。

Full Changelog: aodianjun/com.aodianjun.hyperglow.cnplus@108-0.3.81...109-0.3.82

8/18/2026, 1:53:36 PM

安装包说明

  • hyperglow-cnplus-release-v0.3.70-89.apk(正式版):正常使用请安装此版本。
  • hyperglow-cnplus-debug-v0.3.70-89.apk(调试版):提 issue 反馈问题时请安装此版本,可提供详细诊断日志协助排查。调试签名,仅用于测试与问题反馈,请勿作为日常版本长期安装。

更新日志 (v0.3.70 / versionCode 89)

相比 v0.3.68(versionCode 85),含 v0.3.69 与 v0.3.70 两版变更

✨ 歌词发光效果(AOD 与预览统一)

  • 修复 AOD 发光效果与预览不一致:行级同步歌词(网易云 / QQ 音乐等常见源)此前被分发到旧的共享扫光路径(普通渐变、无光晕、无 dim 底色),完全绕过发光实现;现所有歌词源(行级 / 词级 / 无时序)统一走预览风格渲染管线
  • 复刻预览第一版发光方式:文字本身保持原色,光晕从文字背后透出,不再遮挡文字;解决发光层与文字层割裂感强、发光时文字看不清的问题
  • 修复开启发光后已唱 / 未唱无法区分:未唱文字固定 30% 不透明度 dim 底,已唱文字全亮 + 光晕,对比度稳定不受 AOD 增亮影响
  • 整块扫光带连续穿行多行:进度按行宽加权分摊到各视觉行,多行歌词扫光一气呵成
  • 行级同步时叠加"当前演唱词微光";软光渲染改用独立柔和光晕层,修复硬件加速下发光丢失

🎵 歌词源

  • 歌词源仲裁新增词级时间戳检测:带逐字时间戳的源(如 SuperLyric 卡拉OK)优先于普通行级 LRC
  • 修复 Lyricon 位置流恢复抖动(NetEase ~60Hz 停顿恢复时 300ms 容差保持单调推进)
  • Spicy EX 连接状态实时化:按 SpicyBridgeStore 数据新鲜度动态判定
  • SuperLyric 新增歌词心跳守护:歌词停止推送时强制重新注册
  • 修复 LyricInfo 息屏歌词卡死:检测 stale(>2s)后按播放速率外推

📐 AOD 布局与放置

  • 新增 AOD 时钟锚点稳定:抗时钟边界快速振荡,歌词位置不再跳动
  • AOD surface 重建后保持时钟锚点,重建后不再跳到被挤压的边界
  • 自定义垂直偏置锚点可自由漫游(时钟上方 / 屏幕中部)

🛠 兼容性(HyperOS / 小米)

  • DozeTriggers 类多候选定位:兼容 HyperOS DEV 中包迁移到 AOSP doze 包
  • 字段反射沿父类链查找;修复 HyperOS 3 小米 17 系 SystemUI uid 校验
  • 修复 SystemUI 调用者校验:改为按包名解析 uid,不再硬编码 1000

🖥 主页 UI 与功能

  • 新增锁屏 / 息屏歌词实时预览卡片:未连接歌词源时播放演示动画
  • 新增 Spicy EX 未连接提示、"检查更新"入口
  • 新增导出 / 导入配置、常驻通知、隐藏后台卡片、隐藏桌面图标等设置

🧹 内部重构

  • 预览与实机共享同一渲染核心 LyricGlowRenderer,效果一致性由构造保证
  • 拆分 MainActivity(2660 行)与 AodLyricCanvasView(1579 行)巨型文件,净删约 900 行冗余代码

🧪 测试与构建

  • 新增单测锁定发光管线判定、整块进度计算与扫光几何,AOD 包 111 个测试全绿
  • CI:wrapper-validation v4、构建队列取消旧 commit、超时保护等稳定性配置

Assets

2

8/10/2026, 2:27:13 AM

安装包说明

  • hyperglow-cnplus-release-v0.3.68-85.apk(正式版):正常使用请安装此版本。
  • hyperglow-cnplus-debug-v0.3.68-85.apk(调试版):提 issue 反馈问题时请安装此版本,可提供详细诊断日志协助排查。调试签名,仅用于测试与问题反馈,请勿作为日常版本长期安装。

更新日志 (v0.3.68 / versionCode 85)

✨ 新增

  • 主页改版:模块运行状态彩色卡片、AOD / 锁屏歌词统计卡片、系统信息一览
  • 权限状态新增 Root 权限获取应用列表 两项显示,未授予时提供授权引导
  • 布局设置新增 自定义纵向位置 滑块,拖动调节歌词块相对屏幕的纵向位置
  • 设置新增 导出配置 / 导入配置:一键备份全部设置为 JSON,或从备份文件恢复
  • 设置新增 常驻通知隐藏后台卡片隐藏桌面图标 三个开关
  • SuperLyric / Lyricon 歌词源设置提示始终显示

🐛 修复

  • 修复「此设备未安装 LSPosed」误报:改用 PackageManager.getLaunchIntentForPackage 打开 LSPosed 管理器
  • 修复切歌时 AOD 歌词闪烁
  • 修复歌词时间戳对不上:播放器进度上报停滞/恢复切换导致外推与真实位置抖动,歌词行提前/滞后/跳行,加入 300ms 回退容忍使歌词行平滑推进
  • 修复息屏组件位置乱跳:锁屏通知行动画导致边界逐帧抖动,歌词卡片每次被重新定位,加入 8dp 死区稳定化
  • 修复主页状态卡宽度与图标溢出,移除运行状态中与主页重复的条目
  • 跟进源仓库:SystemUI 进程 UID 动态解析、字段沿继承链查找,修复 HyperOS 3 上「无此系统界面报告」误显示

🔧 其他

  • 诊断改进:无歌词时输出单行「全源汇总」日志(连接状态、stale 秒数、播放进度、当前歌词行),便于定位是播放器未上报进度还是歌词源断连
  • 测试设备重命名为 Redmi K80 Pro,添加 HyperGlow CN+ 项目链接
  • 「音乐暂停后」设置项改名

Assets

2