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 已实际保存”“原生安装已返回”和“页面已显示”。只有发布轨迹时不能登记为已覆盖;容器为空、身份不符或原生空安装抑制未命中时保持待验收或已知降级。