日期:2026-11-10。模块:12.1.1(versionCode 66)。
- Xiaomi MIX Fold 2(22061218C / zizhan),外屏 1080 × 2520。
- HyperOS OS3.0.8.0.VLRCNXM,Android 15,LSPosed 注入 SystemUI。
- 实测为已充电状态,普通电池图标;绿色填充保留系统 RGB。
- 本轮未对内屏、分屏、空心电量样式、低电量 / 省电状态或 ColorOS 做实机回归。
- 从设备提取 SystemUI,核对
DarkIconDispatcherImpl分发顺序和MiuiClock#updateLightDarkTint的区域 / 非 tint 模式规则。 - 确认
MiuiBatteryMeterIconView#onDraw先画缓存的填充位图,再直接画外框。 因此检查 Drawable tint 之外,也必须记录和核对实际位图重建结果。 - 构建、APK 签名验证成功,安装后日志显示 12.1.1 及 dispatcher 三个入口挂载成功;
普通电量图标包含
onDraw在内共 3 个挂载点。 - 以临时测试应用分别触发同一 Activity 内明暗切换、两个 Activity 间切换和快速反复切换。 录屏明确选择外屏物理显示 ID,避免折叠屏默认录制另一块物理屏幕。
临时配置为 color_dark=#5F808080、color_light=#FF808080、alpha=100。
两组采用相同 RGB,只改变 alpha,从而分别观察绿色填充和外框的透明度变化。
测试应用在黑 / 白背景之间切换 6 次,间隔 650ms。
逐帧使用录屏 PTS,分别取时钟、外框和绿色填充的像素样本。每个背景段内, 以该段开始和稳定后的像素值归一化,并比较超过变化幅度 10% 的首帧:
| 切换 | 时钟首次变化 PTS(ms) | 外框首次变化 PTS(ms) | 绿色填充首次变化 PTS(ms) |
|---|---|---|---|
| 深 → 浅 | 2304.31 | 2304.31 | 2304.31 |
| 浅 → 深 | 2948.51 | 2948.51 | 2948.51 |
| 深 → 浅 | 3477.78 | 3477.78 | 3477.78 |
| 浅 → 深 | 4313.09 | 4313.09 | 4313.09 |
| 深 → 浅 | 4906.60 | 4906.60 | 4906.60 |
| 浅 → 深 | 5518.72 | 5518.72 | 5518.72 |
这验证了上述样本的首次变化同步。录屏采样、视频压缩和向量自身的抗锯齿会影响像素阈值, 不能把这一结果解释为所有场景下均有精确到毫秒的零延迟保证。
- 原配置:
enable=true、color_dark=#5FFFFFFF、color_light=#FF000000。 - 两个 Activity 明暗交替 4 次,间隔 650ms;与快速切换合并为最终产物回归录屏。
- 单 Activity 快速明暗切换 30 次,间隔 70ms;检查稳定后颜色没有回退。
- 系统设置 → WLAN → 返回 → 桌面,循环 3 次。
- 临时关闭模块映射录制原生对照,随后恢复原配置。
- 最终检查模块异常日志为空,SystemUI 进程在最终产物回归期间保持同一 PID。
- 静止场景检查额外排除了一次重绘循环:烘焙记录由重建前后的钩子维护, 不再依赖不一定存在的 Drawable tint getter。最终静止 3 秒录屏仅产生 5 帧, 与状态栏时钟 / 数值更新相符;该检查用于发现多余重绘,不作为跨设备性能基准。
- 临时测试应用已卸载,设备返回桌面,配置镜像内容恢复原样。
以下文件位于被 Git 忽略的 .work/,不包含在发布 APK 内:
alpha-gray-final.mp4、alpha-gray-final.samples.json:透明度测试及逐帧像素样本。alpha-gray-final.timings.json:填充与外框的阈值变化时刻对照。final-regression.mp4:恢复配置后的应用间切换与 70ms 间隔快速切换。final-settings.mp4:设置、WLAN、返回桌面切换。native-same.mp4:关闭模块映射的原生对照。sync-probe/build_probe.py、analyze_probe.py:本次设备测试应用与分析脚本。
构建输出为仓库根目录的 StatColor-12.1.1.apk,已覆盖安装并重启 SystemUI 加载。