Skip to Content
LyricWave澜音
Development

LyricWave — 功能保全与验收矩阵

This article follows the authoritative Chinese source. English translation is not yet available. Read the Chinese version.

本矩阵是人工场景的唯一来源和用户可见行为依据。适配流程、实现规则与降级门禁见 宿主适配手册,逐项证据、判据与状态见 适配清单。

场景未执行时保持“待验收”,不以成员匹配、构建或安装成功代替;局部场景确认不代表整项功能或整个构建通过。每个功能域的生效条件与宿主接缝以手册对应章节为准。

1. 适用边界

版本、页面族、生产资格和各能力标志以 host-profiles 为准。“已登记”指 profile 允许能力接入,实际运行还受设置、设备形态、Android API 和契约解析结果限制。本矩阵维护共享要求,具体版本映射和验收记录分别保存在 profile 与任务记录中。

未登记组合保持不支持。新增版本应独立使用本矩阵验收,不能继承相邻构建的人工结果。旧 Activity 行为以既有档案和冻结夹具为依据;通用文档更新不替换冻结基线。

页面族的行为差异

项目Activity 页面族Fragment 页面族
设置原生 PreferenceFragment / PreferenceScreen 和 Activity 结果桥原生 ViewModel、分类/action 模型、Compose 和结果桥
双栏原有播放器状态及资源布局接入,独立右歌词Fragment 事务与视图会话,左 SONG/QUEUE、独立右歌词
玻璃手机及符合既有条件的双栏平板横屏;平板为底部导航/mini 组合手机底导航;平板顶导航与独立底部 mini,玻璃与双栏开关独立
媒体组件共享参考左栏、音量/输出及收起横条,保留原生底部动作共享参考左栏与音量/输出,另按契约接入模式按钮和右下原生动作代理
视频保留既有 Editorial 处理、预览及 Music Video 规则原生视频策略;双栏外框与尺寸基准由当前视图会话统一维护
恢复既有 Activity 生命周期和状态恢复view 身份、事务保存状态、封面/背景恢复和可关闭会话

两类路径复用左栏布局及音量/输出组件,各构建依据自己的 profile 选择接入。旧 Activity 保留原生底部动作;Fragment 另有 SONG/QUEUE 共用补充控件、关闭歌词居中、右下代理及有契约的模式按钮。私有成员、设置模型和附加界面的适用范围分别判定。

2. 共用歌词结果提交

维护规则 · 证据清单

手动、自动与 LLM 结果共用这条通道;查询、来源顺序与缓存策略在歌词来源核对。

场景预期适用条件
首次自动补全(符合所选补全策略的官方可用 / 不可用歌曲)候选就绪且当前身份/安装上下文匹配后立即显示,无需重新进入歌词页精确 profile 声明结果通道
播放中途替换查询完成后即时生效,界面与内部文档一致,无旧歌词残留同上
后台结果迟到(已切歌 / ViewModel 会话结束)不提交;视图重建后读取当前最新结果同上
原生加载迟到返回遵守来源优先级与文档质量规则,身份读取与显示一致同上
加载入口未命中 / 结果先于附加到达附加后仍绑定当前歌词页面并等待当前文档;上一首结果不被注入,当前结果到达即生效同上
已确认当前文档后的空值或错误发布已显示歌词不被清空;结果容器与派生索引仍指向当前文档同上
安装入口以空 SongInfoPtr 进入仅在同 Fragment、同 ViewModel、同请求、同播放身份且存在存活并 ID 匹配的当前文档或 ready replacement 时抑制一次,经既有结果通道补发;其余情况保持原生回退同上
当前确无可用文档时的空信号进入既有降级路径,界面与原生一致,不残留旧文档同上
同一文档重复到达(含文本身份相同、对象不同)不重复提交,无重复刷新或高亮跳变同上
手动条目与自动补全并存手动结果优先;禁用歌曲不注入自动结果同上
结果容器与派生索引一致(切歌 / 拖动进度 / 列表刷新)均使用新文档,无旧索引残留同上
观察者抛异常后的提交失败容器实际保存的文档与派生索引一致,未二次写入回滚;界面仍以原生观察者结果为准同上
提交与切歌交叠不写旧会话的选择与索引;新会话按自身文档重新构建同上
索引复用与失效模块预建后原生同指针索引不重复扫描一次;换歌、改写指针或会话结束后按实际文档重建同上
原生 item 更新后重附加宿主先更新自己的 item,模块随后附加当前 ViewModel,未主动改写 Fragment item同上
安装先于附加未确认安装的同一指针在身份对齐后补发一次;确认安装后同一指针不重复提交同上
歌词面板收起到 mini 后重新展开已就绪的自定义歌词继续显示;同一 Fragment/ViewModel 复用或结果容器更换不会使界面回落到嵌入歌词精确结果通道、身份一致且存在可用自定义文档
上传歌曲异步补全资料库实体,getId 改变而非零 persistentId 相同配置仍命中原歌曲,实际提交指针绑定到宿主当前 ID;切歌返回、收放及迟到空结果不回退到嵌入文本当前播放快照能证明身份关系
同一文档迁移实际提交 ID缓存逻辑 ID 不变,后台生成的独立原生指针能经过安装,不被同对象或同文档去重挡住;无主线程 TTML 重解析候选保留原文且后台准备可用
资料库 ID 准备期间再次改变目标或切歌进行中准备合并到最新目标,过期结果不覆盖当前歌曲;解析失败不循环重试同上
persistentId 为零、不可读或不同不将另一 item 归入当前配置歌曲;原有切歌与过期结果保护保持全部构建
同一 ViewModel 的 result 容器更换附加和同 ID 请求刷新实际容器;同指针去重前读取其当前值,空值不当作旧确认精确结果通道
空值、切歌或身份不匹配时无可用文档不抑制原生空安装,不注入上一首或旧会话文档同上
非空原生结果迟到继续按既有来源优先级、文档质量和请求身份仲裁;空安装抑制不改写其参数同上
重复 metadata 通知同一 ID 的重复通知不打断领先请求;实际切歌才清除请求与待安装状态同上
Fragment 与请求身份不一致暂缓模块替换;身份对齐后按新身份重新判定同上
原生结果先于 Fragment native ID 对齐、空结果回调或新请求退役同当前 canonical 请求、同当前 ViewModel 且显式加载已捕获该 raw ID 时,仅暂存一个存活结果,owner 对齐后经实际结果容器恢复;空/失活结果不占位,新请求、换 VM、切歌或关闭立即退役且不覆盖新请求精确结果通道;实际时序按当前 profile 与运行证据确认
安装确认语义安装调用无异常返回即结束待安装状态;不得当作界面已完整渲染同上
合并 burst(同一主线程投递前的多次发布)只交付最后一个值;中间被覆盖的值不触发模块选择或额外结果通知同上
缓存提前 / 落后入队时缓存仍指向上一首、交付时已切到当前歌曲,仍按交付身份判定,不被旧缓存拒绝同上
新 ViewModel 被拒后无后续生命周期回调暂缓候选仍被重试匹配当前身份并附加同上
候选 View 销毁或 ViewModel 更换候选不被采用并在重试时清理;当前 ViewModel 清空后已跟踪 owner 一并清除并唤醒其余候选同上
旧候选与活动 owner仅当被跟踪 owner 的 View 仍附着、其 ViewModel 字段仍是当前跟踪实例且 Fragment ID 匹配当前请求/身份时,同歌曲旧候选不替换它同上
空 Pair 跨真实边界交付时已跨真实请求/owner 边界则拒绝;同请求内的绑定恢复不误拒,已确认文档与派生索引不变同上
契约缺失 / 提交异常保留原生歌词与既有结果,降级原因可区分;不升级为全局观察或 LiveData 替换同上
翻译、发音与其他歌词订阅者不受结果提交影响,保持原有可用性与状态同上

3. 歌词来源与候选准备

维护规则 · 证据清单

场景预期适用条件
多 ID / 快速切歌 / 切换队列 / 异步完成当前播放对象、元数据转换与歌曲 ID 一致;旧异步结果不应用到新歌曲全部构建
启用与禁用自定义歌词、连续切歌增删改查、禁用优先级与重复注入抑制生效,无重复条目残留自定义歌词接入
普通歌曲与无官方歌词歌曲自定义歌词与原生指针有效性判断一致,两类歌曲都能正常显示同上
缺词 / 非逐字 / 缺翻译手动来源保留;两种模式均沿既有原生资格判断,不达标时按顺序查全部第三方自动来源接入
网络失败 / 离线保留当前可用歌词,无静默清空或旧结果回填同上
手动与自动来源切换手动条目与禁用状态优先于自动候选;切换后显示立即对应新来源同上
自动来源顺序、旧配置与来源更新新查询按用户顺序;Lunabeat 位于 AM 原生之前的旧顺序在读取、保存与运行时统一纠正,只将 Lunabeat 移到原生之后,其他来源相对顺序不变;缺项补齐、去重并过滤未知项;刷新只更新所记录的来源,手动及旧版受保护条目不被覆盖同上
达标原生排在第一 / 中间只查询原生前置来源,前置均未命中即采用原生原生优先关闭
原生不达标或没有原生结果,原生项位于任意位置仍按顺序查询全部第三方,包括原生之后的 Lunabeat,Lunabeat 仍启用;全部未命中时回退可用原生,不清空歌词自动来源接入
自动缓存来源排位变化、原生迟到或查询中切换来源计划缓存在所属 provider 位置生效,旧计划结果不提交;新自动保存项继续遵循选择策略,明确手动项优先自动来源接入
缓存 / ETag / 退避命中与再访问沿既有刷新策略,无重复注入;切歌或会话结束后旧结果不提交同上
原生保留判断无手动覆盖且原生优先开启时,达标原生直接保留;关闭时达标原生也遵循排序同上
自动实时补全二级设置的来源排序父页为导航入口;子页有总开关、原生优先和来源排序。按住拖动柄上下改序,松手保存,取消还原;柄外正常滚动,无障碍移动更新同一顺序;连续改序保存且保持滚动位置和焦点,被阻止动作不改顺序。重置只恢复 AMLL → AM-Lyrics → AM 原生 → Lunabeat,总开关和原生优先保持。刷新停留本页,返回歌词管理设置页可进入
原生优先开启或关闭时的来源排序与重置开启时 AM 原生项隐藏,顺序仍保存为同一份完整顺序且不新增显隐配置;保存可见来源的新顺序后恢复隐藏占位:原位置能保持就保持,若 Lunabeat 已移到原位置之前则只把占位前插到 Lunabeat 之前,旧位置不阻止可见第三方互调且不重排其相对顺序。关闭优先、原生与 Lunabeat 同时可见时,两者仍不能互相越过,阻止后顺序不变;保存、重开与返回父页后可见顺序及完整顺序一致,完整顺序始终保持原生在 Lunabeat 之前设置页可进入
手机/平板排序区标题及资格说明标题、说明、来源文字和拖动柄对齐上方开关的内容边界;重置动作有无障碍名称。原生优先开/关均说明原生须满足逐字及外语译文条件,关闭原生优先时提示 Lunabeat 必须排在 AM 原生之后设置页可进入

4. AI 歌词翻译、缓存与调用统计

维护规则 · 证据清单

AI 增强来源选择最终采用且符合翻译资格的原生、在线或导入歌词,不改变来源优先级,也不依赖在线补全开关。结果仍经共用结果提交。输入与输出格式、客户端协议在手册维护。

场景预期适用条件
所需第三方查询均未命中,回退外文 AM 原生 Line/Word 且无原生译文后台翻译完成后直接显示简体中文译文,原时间轴保持;原生不达标时不会跳过后置来源提前翻译LLM 与上级开关均开启
采用在线或导入歌词,缺少译文翻译所选来源;缓存身份使用该来源原文,不混用原生歌词AI 与自定义歌词开关开启
Word 文档缺少根 xml:lang不调用 LLM;自动查源仍按所选策略判断逐字文档
外文逐行文档正文缺少 itunes:key,或只有空 <translations> 占位正常翻译并写入副本;正文补齐稳定唯一标识,已有 key、原文、时间轴与声部不变;输出只有一个 <translations>;再次播放命中缓存不重复请求逐行文档
原生正文 key 自身重复、无法唯一对应行保守拒绝,不调用接口,保留原歌词逐行文档
中文简繁体 / 地区标签、已有任意语言原生译文、纯文本不调用 LLM,也不复用已存 LLM 译文全部
外文夹中文、日文汉字、重复句、和声与音译中文行保持原样;日文可翻译;各行对应与原时间轴完整全部
主唱与和声同段、纯和声、多段和声、和声先于主唱,或各声部语言不同分别翻译对应声部,保留已有中文文案;每段仅一个 text for,和声写入带一对半角括号的 TTML x-bg 子节点;原正文与时间轴不变,缺 key 时仅补一次所选来源无已有翻译
接口回复主行或和声乱序、漏 ID、重复 ID 或和声归属错误完整的乱序回复按 ID 对应并按原文顺序写回;ID 缺失、重复或归属错误保留原生歌词可控制接口回复
升级声部提取或写回格式后再次播放提示词/缓存版本不匹配的旧译文失效,符合原生/来源资格后重新生成;缓存仍最多 100 首,不写入自定义歌词有旧版 LLM 缓存
有 LLM 缓存后再次播放,所选来源已有译文使用所选来源结果,LLM 缓存不抢先全部
有 LLM 缓存,当前所选来源符合翻译资格复用当前配置与原文匹配的译文,无重复翻译请求;自定义歌词列表无新增项全部
原文、接口或模型更改不复用旧配置或旧原文的翻译结果全部
超时、错误 JSON、必需译文为空、接口失败保留原歌词,本次播放不持续重试,不切换其他服务全部
等待来源、资格跳过、请求失败、原生解析失败正常跳过不弹窗,失败保留原歌词;统计页记录安全的固定原因和实际 API 状态全部
切换思考参数格式,返回后重新打开保持已选格式;不发送时隐藏开关和强度;thinking.type 显示开关和四档,关开关禁用强度行;reasoning_effort 只显示跟随接口/低/高可配置 LLM
正式翻译与测试连接两者发送同样的思考字段;「不发送」两项都省略,thinking.type 按开关发送,单选 reasoning_effort 不发 thinking;「跟随接口」不发 reasoning_effort可控制接口请求
改思考格式或有效强度后重新播放不复用不同格式或有效参数的译文;切换时旧请求和迟到结果沿用取消保护全部
旧设置升级、缓存及降级旧已配置用户保留原请求格式;旧 1/2 缓存只在原格式和其余身份匹配时复用;旧版不读取格式 3有旧版配置或缓存
思考参数不受接口支持连接测试显示固定错误,正式翻译保留原歌词,均不自动省略字段重试请求带思考参数
翻译中切歌、快速往返、关闭开关或结束会话不串歌、不注入过期结果,旧任务取消全部
超过 100 首并重新命中旧项按最近使用淘汰,磁盘条目保持上限全部
重建、暂停重开、字体 / 模糊 / CJK 及原生翻译开关使用现有原生结果链,各订阅者与视图生命周期保持正常全部
打开 LLM 二级设置歌词管理页提供实时统计入口;开关、地址、密钥、模型、思考格式及相关控制、测试连接集中在二级页设置页可进入
编辑后刷新、标题栏或系统返回编辑不跳回首页,刷新仍停留当前二级页;返回先回自定义歌词页再回设置首页,父页搜索状态保留同上
长 API 地址 / 长模型名 / 已填密钥,手机与平板、深浅主题字段标题与箭头始终可见,值在下方单行省略,点击编辑可见完整值;密钥遮蔽;地址/密钥/模型/思考图标分别表达地球/钥匙/芯片/气泡,其他图标尺寸不变同上
翻译关闭或上级开关未开启API 配置与测试连接仍可用;仅自定义歌词总开关关闭时禁用自动翻译,在线补全关闭不影响 AI同上
刚编辑 API 后测试连接,401/403/404/429/超时/网络错误使用最新编辑值;成功要求模型正常响应;失败显示对应本地化原因,不显示密钥、响应正文或原始异常同上
测试中重复点击、返回父页或关闭页面单次在途;离开后无迟到提示,不写歌词缓存、不改开关同上

| 查看缓存与调用统计 | 展示缓存歌曲、译文预览、删除、API 成功/失败/取消、HTTP 状态、耗时;usage 缺失明确为未报告,缓存命中不算 API | 设置 → 歌词管理 → AI 歌词翻译与缓存 → 调用记录与统计 | | 手动翻译当前歌曲或已配置歌词 | 与自动翻译共享逐歌曲互斥和缓存;离开设置页继续保存;同一原文并发只调用一次 API | 配置有效且歌词符合资格 | | 有效译文生成后播放器解析失败 | 有效译文仍落盘,播放器失败另记;下次可复用 | 全部 |

5. 歌词显示、动画与字体

5.1 歌词模糊

维护规则 · 证据清单

适用于Android 12起且独立模糊契约完整的构建,全屏与右栏分别确认。显示基准如下:

行为预期
行距曲线已唱按距离0起为0、13、17、22px,更远22px;待唱为0、8、13、17、22px,更远22px
过渡与偏移两方向300ms线性,同目标不重启动画,改目标从当前值接续;高亮目标0不受用户偏移影响
前奏 / 间奏 / Credits无三点且有证据时首句清晰;三点实际显示后首句未高亮目标8px、已高亮仍0;间奏邻近已唱/待唱按距离1,三点不加模糊,Credits继承末尾焦点
浏览与平板边缘浏览解除焦点模糊,手离开且列表空闲1秒后恢复;上下10%边缘最大5px,浏览中保留边缘
场景预期
逐行首句、三点消失首句连续渐清,不上下错行;区分目标 0 与 300ms 内的实际非零半径
无三点前奏、暂停打开文档首句清晰,后续原曲线模糊,首帧不依赖下一次播放
三点延迟加载显示后平滑切回间奏距离;已经高亮的行仍目标 0
两行重叠、集合缩小、动画等待与宿主实际显示对应,重复事件不延长动画
主词、背景词、发音和重叠词保护随实际显示释放,没有旧词长期残留
带辉光的旧行文字高亮退出后立即开始原 300ms 渐模糊,辉光/上浮/回落继续由宿主运行
末句结束、暂停重开原模糊分布保留;换歌、清空和 Seek 不携带旧结尾焦点
拖动、长按、惯性、程序滚动浏览持续解除焦点模糊,结束 1 秒后恢复;自动跟随不误入浏览
高频拖动进度旧高亮、词流和恢复任务不污染新位置
快滚、字体与翻译变化View 复用不继承其他歌词半径
换歌、清空、同 wrapper 替换 TTML文档状态完整更新,不残留旧行身份
旋转、后台、全屏与右栏首帧正确,会话独立,旧回调不能修改新视图
平板边缘、缩放与位移边缘随当前几何和 padding 更新,高亮渐清连续
创作者行、短行与视口边界模糊自然扩散,没有逐行矩形切边;文字位置不变,滚动不越出歌词视口;清晰后恢复宿主裁剪
关闭、退出、契约或 Hook 缺失释放模块效果,保留宿主透明度和自身效果,能力状态如实降级

5.2 歌词辉光与末词补偿

维护规则 · 证据清单

按本构建声明的辉光/末词能力分别记录。CJK开关只控制 CJK 辉光;末词补偿和英语拆词辉光由“歌词效果优化”开关门禁,分别安装,任一不可用不撤销其他项。cjk.splitWordGlow 只作为可选精确 profile 对象,其原生 binding-builder 与 trim 契约独立于 CJK 开关和 maxSpanGlowCharacters;不新增功能或设置。lyricRepairs 保留各项完整诊断,并按维护规则汇总整体状态。跨行扫光同样由“歌词效果优化”控制,另列下一节。所有开关更改后重启生效。保留原生逐字时长、词分组、整行切换与位移。

CJK 资格与平均时长按去除 Unicode 标点 \p{P} 的正文判断,显示、分组和原生时序保留。长度与绑定数量仍按含标点原文核对,详见维护规则。

场景预期
CJK 短尾词最后一个字在原生时间内逐渐全亮,末尾不残留暗边或再次突然补亮
辉光长尾词(双开)末词补偿和原辉光同时正常,原有缩放、回落、结束清理及位移保持
英文和 Latin 发音保留原生扫光终点及延迟规则
原版可触发辉光的英文短词开关前后都保持原版逐字辉光、缩放、上浮、回落和字间位移
英语拆分长词:同一视觉行,整组 >7、至少两个连续前景 span、任一原始 span 2~7 字符且 ≥1000ms已声明能力且优化开启时,按整词触发一次。字母依次更快发光和放大,仍按宿主原时刻回缩,字间位移跟随缩放。每段按原时间扫亮,文本完整,结束、取消及循环后无残留
单个超长 span、各段均不合格、组歧义、混合脚本、背景词或跨视觉行不额外触发辉光;关闭优化或未声明契约时保留原生表现
单独成词的 ? 或 ?去标点后的正文为空,不增加 CJK 辉光资格;标点照常显示,宿主原生动画不变
「你」 / 你?按 1 个 CJK 正文码点成为候选,保留引号和问号显示,仍由原生触发动画
你好? / 你好吗!profile 放行短 span 且原生时长分别 ≥2000ms/3000ms 时,按 2/3 个正文码点成为候选;标点仍显示
标点有独立原生绑定你? 的 split 数 2 允许、3 拒绝;你好吗? 的 4 允许、5 拒绝;原文长度与累计时长不匹配时仍保留原生判定
A你? / 你1! / 你😀? / 你 好?删除标点后仍有 Latin、数字、emoji 或内部空白,正文不是纯 CJK 码点;保留宿主原生判定,不增加 CJK 辉光资格
切歌、循环、拖动进度不把其他 reader 或其他词的末词结果用于当前动画
CJK关、优化关并重启辉光与末词补偿都不安装,保持宿主原版表现
CJK开、优化关并重启仅辉光生效,末词补偿不安装;原版尾词动画与结束清理保持
CJK关、优化开并重启CJK辉光不安装;满足资格的CJK末词补偿及已声明对象的英语拆词辉光独立生效,其他原生动画保持
CJK开、优化开并重启辉光与末词补偿各自生效,组合后原有扫光、缩放、回落与位移正常
不支持或缺失成员CJK辉光、英语拆词对象或末词补偿只降级对应项;解析修复、逐行对齐及其他歌词效果不被撤销,安装信息可区分原因
汉字 / 日文 / 韩文、合并与重叠高亮单个未合并词按原门槛辉光,合并高亮不串词;取消/结束后无残留

5.3 跨行歌词扫光

维护规则 · 证据清单

仅完整声明独立lyricWrapSweep契约的精确构建适用。“歌词效果优化”开启并重启后才尝试安装,开关不替代契约;CJK通过不代表本项通过。单行及明确不支持的复合形状保留原生。

场景预期
两行跨行词高亮按实际字形宽度跨两行连续推进,行首/行尾无暗边残留,第二行不落后也不提前
从头播放且未来行可见未到时间的行始终保持原生暗色,包括未来行的最后一个 span 跨视觉行、span 前存在其他词的情况;预加载、重新绑定与布局刷新不会提前高亮
已唱行退场及重新显示原生渐暗连续执行,退场后布局刷新或重新绑定不恢复旧亮色;过期遮罩的渐暗回调不撤销新行接管
当前行入场渐亮暗色首帧不提前结束活动扫光,亮度曲线继续使用原版动画
三行跨行词累计宽度按文本顺序推进;末行完成时整词全亮,无补亮覆盖
跨行长 span → 同行短 span上一段尾部已亮文字不被下一段羽化重新画暗,后一段仍按原版时间扫光;手机/平板改变视觉行数后交接仍连续
后继补亮或静态刷新兼容方向的两个 stop 不回撤,原版颜色变化继续;原几何无效或暗色状态不沿用旧亮边
原生单行 span、不同遮罩或相反方向没有已完成跨行遮罩保护的写入保持原生,不按固定字数、歌词内容或设备种类特判
词内中段 Seek(之前 / 之后)Seek 后按新的当前位置重建进度;旧接管不写入新位置
暂停 / 恢复原生动画随播放暂停与恢复;恢复后进度连续,无跳变重复刷新
切歌 / 行回收换绑与回收后旧回调不写入新行;新行按自身状态从头推进
字体或字号变化、旋转、双栏布局重建后按新几何继续;旧几何失效,不沿用旧宽度;扫光期间或末尾无法接管时原生补亮可继续写入
原文(TOP)与发音(BOTTOM)词同一 flexbox 内只接管该词所在 bank;另一 bank 保持原生
前景与背景词前景与背景是两个独立 flexbox,各自独立接管或保持原生;不能把 TOP/BOTTOM 当作前景/背景
RTL 歌词渐变方向与行内推进方向与文字方向一致
混合 Bidi 或复合形状明确不支持时保持原生渲染,能力状态可区分
开关关闭 / 未声明契约缺少设置时关闭;关闭并重启后不安装跨行目标,恢复宿主原生扫光。开启后若未声明契约则报告不支持并保留原生;CJK 开关不控制本项
与活动行高亮同开但仅一项可用两项分别安装和报告;跨行不支持、降级或失败不阻止活动行高亮,反之亦然

5.3.1 歌词效果优化:活动行高亮

维护规则 · 证据清单

设置项“歌词效果优化”默认关闭;更改后重启 Apple Music 生效。本能力与跨行扫光共用该开关,但仍只在各自的精确原生契约可用时启用,支持范围见维护规则。

场景预期
开关与重启缺少设置时显示关闭;开启并重启后仅在 lyricBackgroundHighlight 契约可用时启用,关闭并重启后不安装本能力并恢复宿主原有歌词表现
与跨行扫光同开但仅一项可用两项独立安装、报告与验收;本能力不支持或失败不影响跨行扫光,反之亦然
主句与和声跨句和声未结束而主句已换到下一句时,旧主句仍保持原生焦点、清晰和高亮,滚动与动画沿用原生表现
和声结束解除额外保留,主句按当前原生状态继续保持或正常退出,不再因已结束的和声停留
多个和声每个和声按自身时间进入;父句保留到相关和声最后一次结束,短间隙不单独触发提前恢复
原文与发音和声原文、发音两路背景词各自按时间显示,父句保留到相关背景词结束
无和声歌词与宿主原有显示一致,不额外延长主句焦点或改变切句时机
暂停与恢复暂停时保持当前原生画面;恢复后从当前位置继续,不因模块计时提前退出
跳转播放位置跳到和声前、中、后均按新位置显示;旧和声不残留,跳入和声时仍保留对应父句焦点
换歌、循环与重播上一首的焦点和和声不残留;新歌曲、循环及同位置重播按当前会话重新推进
行重绑、旋转与页面重建行绑定沿宿主原生流程;旋转或页面重建后继续按当前播放位置显示焦点、滚动和动画,不跳回旧位置
全屏与双栏两侧各自维护当前歌词显示;切换或隐藏一侧时,另一侧仍有效的原生显示继续
手动浏览歌词手动上下浏览仍遵守宿主原生滚动和焦点门槛,不被额外拉回当前句
能力不支持或降级不支持或安装失败时原生歌词仍可继续使用;运行异常按维护规则尝试恢复,能力状态如实报告降级

5.4 字体与歌词面板

维护规则 · 证据清单

场景预期
导入TTF/OTF、切换与禁用字体普通行/逐字行一致;切换生效,禁用恢复原字体,原生文本/翻译/发音不丢失
加载失败、后台准备与重试原生显示可用,错误/就绪可区分,资源就绪后按既有方式应用,无主线程阻塞
普通/逐字/翻译/背景/静态/间奏/Credits视口、原生留白、渐变和高亮锚点正确,Credits/三点分类不与普通歌词混淆
旋转/重建、暂停打开、快速滚动字体与行宽按新view恢复,旧监听/旧adapter宽度不污染新行
字体与模糊、CJK、歌词效果优化同开换字体后按新几何绘制,原生时序、焦点、跨行交接、末词补偿和文字可读性保持

6. 玻璃导航、mini与sheet

维护规则 · 证据清单

适用精确玻璃资格且Android13起。Activity手机/双栏平板与Fragment手机/平板按各自原生导航形态分别记录,Fragment玻璃与双栏开关独立。

场景预期
冷启动、导航/mini先后就绪、菜单暂不可读材质与可映射菜单就绪才接管,未就绪可用原生控件,无空白点击或旧材质
切页、重复点击、搜索与原生播放控件页面选择/点击对象正确,mini播放与打开播放器保持原生
手机从SONG/歌词/QUEUE收回快速拖动、松手自动收回、返回及中途再展开均连续,mini/底导航间距正确,末段无下陷再回正
收回途中及稳定后inset/布局变化原生内容与材质同帧对齐,实际落点收敛,正确位置不反复跳动
mini账号/队列延迟恢复、已显示条件满足后按原生方式显示,已显示不重复触发;手机/平板各自确认
未登录、无当前对象、恢复超时或入口异常保持原生状态,不强显空mini;安装与恢复完成可区分
平板顶导航/抽屉/mini,单栏与双栏切换各形态选择与播放动作正确;未符合双栏时也按独立玻璃资格工作
参数连续修改、启停、旋转/多窗口间距/模糊按现有范围即时反映,底部占位/采样区域正确,无旧窗口背景
前后台、view重建、失败/关闭/销毁原生显示、触摸与仍拥有的属性恢复;旧回调不影响新视图

6.1 底栏收缩、输入与渲染

维护规则 · 证据清单

仅精确收缩能力及手机底导航形态适用。平板/旧页面族与未授予能力的构建保持展开,无收缩/回弹设置;旧平板字段不改变资格。

场景预期
两个稳定端点开始持续同向划动页面下滑收缩、上滑展开;不反复离开端点又返回,原生列表与Compose均成立
快速反向、旧动画首帧前反向目标及时改变,进度/速度连续,不被旧任务拉回
MOVE已定方向后抬手触点回带、短促未决滑动已定方向不被UP反转,短滑按净方向补判;手指持续反向仍可改变目标
触顶/触底外推、短内容/空页与向内侧滚动外推/不可滚内容不改状态,向内侧正常触发;被拒意图不驱动后续惯性
页面拖动后惯性滚动只沿本手势确认方向,peek/留白变化或回弹不制造反向目标
展开/收缩态从导航、搜索、mini起拖并移出整次手势不驱动收缩,标签拖拽/播放/打开播放器仍正常;中央空白不当导航
横向、多指、CANCEL、后台/关闭后再操作不误触发,没有残余方向、速度和起点归属
原生导航按下中玻璃接管、透明原生tab区域点击旧按压被取消,隐藏tab不再被点击;页面与mini仍接收各自操作
菜单未就绪、关闭玻璃、失败/销毁再附着原生导航恢复分派,无迟到抬手触发旧标签
搜索末项可分离、仅两标签、搜索居中或无法识别仅合法时分离;实际选中分离搜索才回退首标签非强调图标,其他保持当前选中图标/强调色
点击收缩小胶囊、分离搜索及分离过程中的同次点击小胶囊展开,搜索切到对应页,分离变化不抢同次点击,命中与当前视觉一致
有/无mini、RTL无mini也收缩并中央留空,左右控件同曲线;槽位start/end和命中随RTL交换
收缩态打开完整播放器、再收回左右按钮随展开退出,mini操作保持原生,原生sheet校准在收缩结束后恢复
导航主动选中、切页/旋转/配置变化/关闭收缩同步展开,导航/mini/padding/peek同曲线,新会话不沿旧状态
收缩控件外观、回弹与按压三控件同高43dp、与展开底边对齐,图标同心;mini下沉及两方向回弹幅度可配,回弹朝mini、展开外扩受间隙限制;背板回弹而选择水珠不回弹,按压轮廓与命中一致
反复收缩展开、分离搜索出现/消失胶囊/水珠/搜索形状、位置与透明度连续,无材质闪烁/残影;隐藏搜索不接收点击
窗口/密度变化、完整播放器过渡当前几何重新计算,预留承载不露多余背景、不缩放文字图标,背景仍实时变化
无收缩能力的宿主材质和交互沿原始路径,不受本项渲染优化影响
两类圆角的外观对照收缩手机使用标准圆角,其他宿主/完整播放器保留原路径,不能据单设备效果宣称所有设备性能提升
已明确安排性能测量时分开观察启动/动画/背景/效果/层/导航和mini阶段,CPU与GPU结论不混淆;无测量不报告收益

6.2 底栏动画设置

场景预期
从高级设置进入底栏动画二级页主页面保留收缩开关,四项参数集中子页,入口受宿主/玻璃/收缩资格
连续改四项参数、单项恢复默认、返回再改其他设置从最新草稿合并,不丢其他参数,实时传递与旧键/范围/默认一致
标题栏/系统/手势返回、保存失败、关闭对话框返回正确父页,失败可重试,旧刷新/返回回调不再影响关闭页面

7. 导航一级页面启动预热

维护规则 · 证据清单

精确能力、完整契约和当前形态资源均满足才适用,手机/平板横竖屏分别确认。

场景预期
默认/旧配置缺键、明确保存关闭值默认开启一致,已保存关闭不被升级覆盖;开关重开应用生效,未知构建/形态不显示入口
冷启动等待导航/视口就绪只预建实际可用一级页,隐藏保留并按实际视口预布局;日志区分安装、排队与完成数量
手机底导航、平板抽屉关闭、玻璃隐藏原生导航仍读取真实原生菜单,checked与当前页一致,不主动打开抽屉或切页
已访问/系统恢复隐藏页、尚无View复用原实例/状态且完成一次预布局;未就绪等待,不将容器存在直接报完成
立即触摸/滚动/切换一级页预热按最新选中继续,不回切、不多建、不改标题/颜色/工具栏/播放上下文或返回栈
详情页、播放器、抽屉、SONG/QUEUE不成为预热对象,原生操作与单/双栏状态不变
root隐藏/后台/状态保存/销毁、tab列表改变停止旧任务,迟到回调不操作新root;已提交事务可由原生完成
原生事务不回调、资源/契约缺失有界结束并显示具体门禁/原因,不阻断原生切页,不以ACTIVE报已完成
旋转/重建后新root重新核对真实内容视口/实例,旧会话回调无效
真正打开被预热页面数据刷新、标题/工具栏、返回与搜索键盘正常,隐藏异步工作不污染前台
关闭并重开、玻璃/收缩/双栏各种组合恢复原生按需创建,其他独立能力按自身资格工作
启动时间、内存、立即操作争用与首次切换对照由使用者分别记录,不把预建成功等同首次零掉帧

8. 平板布局、视频与恢复

维护规则 · 证据清单

先满足精确构建双栏资格及开关。旧 Activity 按原生is_tablet与横屏配置判定;Fragment 按当前窗口宽度至少600dp、宽大于高及原生useNavigationDrawer判定。其他形态保持原生。按实际播放器CSS视口与当前响应式策略观察,名义45%/55%分区和实际host宽分别记录,原生歌词留白保留。

两族静态SONG路径覆盖共享左栏、音量/输出及收起横条;旧Activity保留原生底部动作。SONG/QUEUE共用补充控件、模式按钮(有契约时)、右下代理及关闭歌词居中属于Fragment场景。QUEUE定制渐变仅在当前路径实际调用时验收,其他路径核对各自原生行为。

场景预期
冷启动首次展开、关闭再开、新pane首帧左右内容正确、右歌词可测量,metadata/进度/播放/质量标识同心,无旧动作或旧尺寸首帧
静态封面封面与控制组按CSS内容宽规则共宽并在左列居中;不按进度宽/上方剩余高度重算,原生暂停scale和共享过渡保留
CSS高512/640/768/1000/1080与宽查询边界两侧同一套响应式规则重算,不固定画板或逐控件补偏移,metadata/控件不挤封面;fontScale不二次放大
不同density、DPI、多窗口与系统栏以实际CSS视口判断分支,平台命中按density;inset不重复扣,旋转后不沿旧尺寸
Fragment的SONG/QUEUE双向切换进度/transport/音量共用几何,QUEUE顶部信息/列表/原生动作保留,不向FrameLayout套约束参数
原生更多/favorite/播放/SeekBar/音质标识原生glyph、selector、点击/拖动/取消/无障碍与状态正确,标识不缩放裁切或侵入播放区
音量拖动、越界、取消、键盘/无障碍、隐藏整组件含图标与进度同宽,回读实际系统音量;反馈沿既有参数,隐藏/退出停止监听/动画
输出按钮;Fragment另核对SONG/QUEUE与关闭歌词居中保持窗口底部工具行位置和原生平台输出入口,命中清晰,过渡/隐藏不可额外点击
Fragment模式按钮切换、按住/悬停、系统关闭动画有模式契约时图标状态原生,点击仅图标回弹、命中不缩放,停用/隐藏回静态,无闲置持续动画
收起横条;Fragment另核对右下歌词/队列代理横条为附近独立目标,命中按CSS实际尺寸、dp下限及可用空间共同确定;代理44dp区/8dp间距/底12dp,原动作状态/点击长按正确,不争用封面/sheet手势
状态栏选项关闭、开启后展开/收起;Fragment另核对切pane默认及旧配置关闭;开启仅完全展开后隐藏;Fragment收起过程中保持、停稳恢复,旧Activity按SONG实际可见性处理;退出恢复原状态,导航栏/手势区不改
Fragment的QUEUE首次进入、上下滚到边缘与sticky header原视口和覆盖footer保持,渐隐在控制区上方,列表不穿透播放区;不重复扣高度或清底padding
Fragment的QUEUE渐变positions为空、渐变更新失败、返回SONG空值恢复/后续原生写入正确,单渐变失败不释放共享布局/音量/封面,列表裁剪仍有效
Fragment的sheet中途/crossfade原生重显footer隐藏动作不闪回,材质/原生位置同帧一致,无重复布局抖动
Fragment手动关歌词、切SONG/QUEUE、换无歌词歌手动状态保留,资格随当前歌曲,右栏无旧文本/控件假可用;居中不累计X、不改原生scale/Y
旋转/多窗口/状态恢复、后台与view重建门禁、host/tag/事务和逐字宽度按新视图恢复,旧任务不操作新View
关闭/退出资格/失败/销毁布局、状态栏、封面基准、触摸与仍拥有属性恢复,音量/叠加层/监听释放

8.1 视频切换分别记录

各行分别覆盖尺寸/比例、位置/外框、表面/渐变与原生动画;Activity按其既有Editorial/预览/Music Video规则,Fragment按原生视频路径。

场景预期
静态→静态歌曲/文本/封面同步,无旧尺寸往返或底部控件闪回
静态→视频外框与当前基准一致,视频按原生比例/渐变,临时零尺寸不污染最终目标
视频→静态纹理/模式/静态图同步恢复,无旧视频残留或额外外框往返
视频→视频(相同比例)接力属于当前歌曲,外框连续,旧异步准备不回填
视频→视频(不同比例)按新比例过渡,区分原生比例动画与模块额外位移,无旧基准覆盖
暂停/后台/旋转与连续切歌组合保留原生scale、圆角、阴影、表面和恢复语义,返回无旧采样/纹理

9. 名称修正与元数据表面

维护规则 · 证据清单

每个表面分别确认原地区/cn/jp三种模式、原名恢复、ID/ISRC归属、网络/离线/缓存及原生操作,一个表面成功不代表其他表面通过。

表面 / 场景预期
播放器、多ID与切歌标题/艺术家与当前歌曲一致,异步结果不串歌,原生播放动作保持
队列、历史与重绑定标题/艺术家归属正确,当前项与点击后的歌曲一致
操作表、最近搜索与重搜显示与目标一致,原生动作/选择/跳页正确;已知降级独立标记
资料库列表/Compose、重建名称证据与显示一致,恢复后无旧实体覆盖
专辑/歌单容器、歌曲条目与刷新标题/艺术家及原生点击/菜单保持,异步刷新只影响当前实体
艺术家、关联集合与top-songs地区证据仍来自歌曲,名称和热门歌曲副标题一致,不替换logo或凭艺人名猜语言
主页模型重绑定与封面连续性文本正确,实际加载封面与当前对象一致,连续性单独记录
可选表面/子组缺失或失败独立显示降级,原生页面及其他组可用,不把局部成功写成整项通过

9.1 Compose艺人页

维护规则 · 证据清单

仅声明该表面的构建适用,各构建分别执行。

场景预期
打开艺人页头部与top-songs副标题按当前证据修正,logo/点击/菜单/跳页正常
已有缓存、alias延迟到达或恢复原名首次与后续刷新显示当前实体,原生ID/revision保留
艺人A→B、loading/error、非艺人或缺ID属性旧任务不发布到新Success,不残留旧艺人/歌曲状态
关闭修正、切模式并重开原名恢复及缓存优先级正确,结果按本构建记录
声明缺类/字段/getter、安装失败此表面降级,其他HLE表面与原生页面可用
作用域关闭前已有延迟刷新不再写旧owner,也不取消其他表面的队列

10. 设置、蜂窝、DPI、数据与插件

维护规则 · 证据清单

场景预期
原生设置入口、分类/行重建、重复打开无launcher形态保持,分类去重、点击/返回/文件结果归属正确
打开模块设置、根页关闭和进场中返回使用与 miuix 导航一致的连续进退,退场中无新操作;系统动画关闭时立即完成,宿主销毁/更换不等待动画、不残留旧窗口
小白条、三键导航、横屏、主题与键盘模块背景和滚动视口延伸到导航区,无独立底色或分割线;末项可完整滚出导航触摸区,横屏侧边安全区不丢失,键盘下输入可见;主题变化同步系统栏外观,退出后宿主窗口保持自身状态
手机/平板、深浅主题、放大文字及打开键盘顶栏随窗口宽度适配,正文和控件对齐;长页面可滚动,子页进退使用 miuix 默认转场;返回先关闭键盘或最上层弹层,回到父页恢复其滚动位置
窄屏、600dp 宽屏、1200dp 宽屏与 Rail 收起/展开窄屏保留带 MAIN 概览的单页;宽屏显示仅含六个分类、无概览入口的原生 miuix NavigationRail,打开默认进入歌词管理,默认 80dp/240dp 宽度及 1200dp 初始展开正确;右侧同一 NavDisplay 页面填满剩余空间,无 720dp 居中限宽
宽屏分类切换、一级页关闭与二级页返回宽屏根页面直接对应所选分类,分类切换替换根且不累积返回历史;一级分类页顶栏关闭和系统返回退出模块设置,二级页返回所属分类;自动实时补全和 LLM 歌词翻译高亮歌词管理,底栏动画高亮界面与底栏
宽屏与窄屏切换、分类和二级页状态变窄时现有分类或二级页补入 MAIN 根,变宽时移除 MAIN 前缀,只有 MAIN 时进入歌词管理;当前分类/二级页、共享草稿、各页滚动位置、全局弹层及 SAF 会话保持,返回语义随新宽度更新
分类高亮、旋转、分屏、RTL、键盘与页面状态图标、文字、选中底色、焦点及 RTL 排列一致;切页、返回及转场结束后,旧页和视差效果均保持在右侧内容区,不覆盖 Rail;窗口尺寸或方向变化后,各页滚动位置与共享最新草稿保持;文本和导航方向随 RTL 镜像;键盘打开时当前输入可见,返回先关闭键盘或最上层弹层
分类导航时已有弹层、编辑器或 SAF 选择根 Scaffold、在途弹层、编辑器会话和文件结果仍归属于发起页;换页不把弹层或结果转到其他分类,原页面关闭时相关会话释放
设置说明、帮助与重启提示标题、正文与通用提示沿弹窗内容边界对齐,不额外套用页面分组缩进;深浅主题均使用正常正文颜色,字号与分段清楚,长说明只滚动内容、确认按钮固定
歌词管理快捷操作、搜索与编辑四个操作共用一个圆角外形、以竖线分区,图标与文案等宽居中;搜索与结果列表在同一组内,空态与分页无额外大块留白;首屏最多 20 条,每次加载更多增加 50 条(20→70→120),筛选结果由空恢复时重新显示最多 20 条,同条件刷新保留已展示窗口并按结果总数收敛;编辑表单紧凑、无重复分组标题,长歌词可滚动,键盘下仍可确认或取消
来源排序长按、跨行拖动、释放与取消长按有抬起反馈,拖动跟手且相邻行连续让位,非拖动行不额外使用蓝色高亮;松手时归位、底色与纵向缩放同步恢复,无黑色浮框或额外按压层,取消时相邻行同时回退;松手保存、取消还原,不越过来源约束,拖动柄外仍可正常滚动
普通参数修改后返回/关闭再开,输入/歌词编辑确认成功修改已自动保存,无全局保存要求;弹窗/编辑器自身确认保留,失败提示且草稿可继续
子页连续编辑、返回和单项默认共用最新草稿,不覆盖其他参数,手机/平板与深浅主题标题/宽度/触摸正确
字体/歌词SAF选择后旋转/后台结果交给正确会话,旧页面不接收新结果,资产不被普通设置保存覆盖
蜂窝开关、已登录/未登录与不同原生类别默认关闭,仅精确资格开放,入口/availability与原生操作不被绕过
DPI为0或160–640、重启/旋转/多窗口仅宿主有效,恢复系统密度及失败失活正确,不更改系统其他应用
配置升级/回退、迁移源暂不可用旧键/文件/资产可用,未完成迁移只读重试不覆盖源或资产
在线更新/批量取消、导入导出冲突与中断进度/取消与覆盖/保留选择正确,原子事务可恢复,ZIP格式/文件ID不变
SQLite/cache/目录与重开namespace及存储归属保持,普通保存不误清歌词/字体/来源数据
已有插件加载、启停、设置与冲突名称、元信息、状态与操作同卡对齐,不重复默认状态,运行版本、真实诊断与待重启提示保留;公共SDK和存储/生命周期保持,冲突记录随内置组关闭更新,宿主降级不变成公共协议错误
未授予能力或未知构建标记不适用/不支持,原生播放可用,不借其他构建资格

11. 结果记录与能力缺口

单次结果保存于对应任务记录,本文件只维护通用标准。未执行保持待验收;已知不支持、已知降级、新异常分别记录,不能借邻近版本反馈或源码/静态匹配报告通过。

项目填写要求
宿主身份精确包名、versionName、versionCode、页面族
模块身份代码/构建版本及实际安装产物
环境设备、Android、横竖屏/窗口、有效视口/DPI与相关设置
条件账号/网络、歌曲/歌词/视频类型、功能资格与开关
场景本矩阵功能域/场景、实际操作、预期与实际结果
状态已确认 / 待验收 / 不适用 / 已知降级 / 新异常,注明未覆盖理由
证据使用者反馈、必要日志/截图/录屏及明确范围
阶段包/源码、静态检查、构建、能力安装与人工结果分别记录
缺口与回退profile已知降级/实际失败子面、停用能力/tuple与原生恢复方法

profile的runtimeVerified依据实际范围维护,旧preserved-baseline、缺省或false都不解释为当前全部通过。能力缺失/歧义/运行失败分别报告;扩大候选、首匹配或修改冻结基线不能代替证据。无设备/原始包/操作结果时不推定通过,人工由使用者执行。

歌词结果提交类证据须区分“模块已调用发布”“目标 LiveData 已实际保存”“原生安装已返回”和“页面已显示”。只有发布轨迹时不能登记为已覆盖;容器为空、身份不符或原生空安装抑制未命中时保持待验收或已知降级。


View authoritative source on GitHub

On this page