r14.6.4
r14.6.4
发布日期:2026-07-25。状态:稳定版(r14.6.x 终版;合并 r14.6.2、r14.6.3;双排信号栏修复与生命周期治理已实机验证)。
r14.6.2与r14.6.3已废弃并合并到本版本,对应 release/tag 已删除。本版本在r14.6.3基础上做最终收尾整理,未改动 Hook 逻辑。
r14.6.x 演进
- r14.6.0 原始尝试:
- D 类废弃 API/权限迁移:将
Settings.System自定义键(systemui_restart_time、last_music_paused_time、dark_mode_enable_by_setting)迁移到模块SharedPreferences;新增Helpers.getSystemSharedPrefs()。 - PendingIntent flag 兼容辅助:在
Helpers中新增getMutableActivityPendingIntent/getImmutableActivityPendingIntent。 - 通知渠道:
MainApplication.onCreate创建默认低重要性NotificationChannel(IDcustomiuizer_default)。 - 权限声明:
AndroidManifest.xml新增WAKE_LOCK与POST_NOTIFICATIONS。
- D 类废弃 API/权限迁移:将
- r14.6.1 热修复:
- 回退
Settings.System自定义键迁移,恢复使用Settings.System;移除Helpers.getSystemSharedPrefs(),避免onPackageReady早期Context尚未绑定到应用数据目录时调用getSharedPreferences触发RuntimeException: No data directory found for package android。 - 保留通知渠道、
WAKE_LOCK/POST_NOTIFICATIONS权限声明、PendingIntent flag 兼容辅助。 - 实机验证确认无模块相关报错。
- 回退
- r14.6.2 清理与发布:
- 删除 GitHub
r14.6.0和r14.6.1release 与 tag(两个版本均已废弃或合并)。 - 合并 r14.6.0/14.6.1 变更记录到本版本。
- 移除
Helpers.java中未使用的android.content.SharedPreferences导入。 - 移除
AndroidManifest.xml中未使用的POST_NOTIFICATIONS权限声明;WAKE_LOCK仍保留(Controls.java实际使用WakeLock)。 - 重写
README.md,新增“各版本全方位对比”表。
- 删除 GitHub
- r14.6.3 最终修复:
- ClassNotFound 异常回退:
XposedHelpers.findClassInternal在类加载器无法找到类时,增加对Application层 ClassLoader 的回退查找,减少 systemui/keyguard 内部类加载失败。 - Owner 级 PreferenceObserver 管理:
ModuleHelper新增observePreferenceChange(PreferenceObserver, Object)与removePreferenceObserver(Object),支持以生命周期宿主为 owner 注册/注销偏好监听,避免静态观察者重复注册与内存泄漏。 - Controls.java 长按回调治理:
NavBarActionsHook在postDelayed之前先removeCallbacks,防止导航键长按 Runnable 重复堆积。 - Launcher.java 生命周期治理:
RenameShortcutsHook使用 owner 方式注册PreferenceObserver,并在onDestroy中移除。PrivacyFolderHook与setupLauncher的BroadcastReceiver改为具名变量、先注销旧实例再注册,并在onDestroy中统一清理。
- System.java 生命周期治理:
- 所有
observePreferenceChange调用改为以thisObject为 owner 注册。 KeyguardSecurityContainerController、KeyguardViewMediator、BluetoothControllerImpl、MiuiPhoneStatusBarPolicy等处的匿名BroadcastReceiver先注销旧实例再注册,避免重复。HeadsUpManager的mRemoveAlertRunnable、MultiWindowPlusHook、ExpandHeadsUpHook的postDelayed在发送前移除旧回调或复用 stored runnable,防止重复与泄漏。
- 所有
- SystemUI.java 方法拆分:将
MonitorDeviceInfoHook与AddCustomTileHook提取到SystemUIMonitorAndTileHooks.java,SystemUI.java保留委托 stub;通过包级可见的 helper/field 共享解决跨类依赖,降低主文件行数与维护耦合。 - 代码清理与质量修复:清理改动文件中的未使用 import、注释死代码;修复
SystemUIMonitorAndTileHooks的DefaultLocale与DiscouragedApilint 警告。 - 单元测试补齐:新增
XposedHelpersCacheTest、AppHelperTest(与已有PrefMapTest一起),覆盖XposedHelpers反射缓存、additional instance field以及AppHelper的 preferences 工具方法。 - 双排信号栏 SIM1 信号为空修复:
SystemUI.DualRowSignalHook不再把MobileIconState.strengthId覆盖成等级数值,保留原始信号 drawable 资源 ID;在applyDarknessInternal与onDarkChanged中通过Resources.getResourceName动态解析资源名得到等级,并绘制双排自定义图标。修复因strengthId被改为 1..5 后被 SystemUIsetImageResource当作无效资源 ID 加载,导致 SIM1 信号为空的问题。 - 双排信号栏图标颜色跟随状态栏:
applyDualSignalDrawables在设置自定义信号图标后,从mMobileRoaming读取当前ImageTintList(未取到则按mLight回退黑白),并同步设置到mMobile与mSmallRoaming,修复状态栏图标变黑/变白时双排信号图标颜色不跟随的问题。
- ClassNotFound 异常回退:
- r14.6.4 最终整理:
- 大文件拆分(俄罗斯代码风格;保持原类委托 stub,调用方不变):
System.java:提取状态栏/时钟相关 hooks 到SystemClockHooks.java、SystemStatusBarBackgroundHooks.java、SystemStatusBarIconHooks.java。SystemUI.java:提取电池相关 hooks 到SystemUIBatteryHooks.java。GlobalActions.java:提取意图启动/解析逻辑到GlobalActionsIntentHelper.java。- 移除
System.java中废弃的注释代码块。
- 单元测试:
PrefMapTest:补充getStringAsInt缓存与失效测试。XposedHelpersCacheTest:补充Constructor缓存/匹配测试。AppHelperTest:补充 clearType=0、非数字字符串、缺失 needle 等边界测试。
- Proguard/R8:
proguard-rules.pro补充MainActivity、Credentials、MainApplication等 manifest 组件的-keepnames。
- 依赖检查:
- 通过
dependencyUpdates检查,当前配置仓库中无合适的安全稳定升级项,未升级 alpha/beta 依赖。
- 通过
- 大文件拆分(俄罗斯代码风格;保持原类委托 stub,调用方不变):
构建产物验证
versionCode164 /versionNamer14.6.4。- APK:
CustoMIUIzer-A14-r14.6.4.apk,2,949,361 bytes,SHA-256:E7E6A23A04E709DF269DF1087FB3128435F532CF35BE53C1FE051595249B3280。 - 通过
gradlew test与gradlew assembleRelease;lintVitalRelease0 错误,既有 ROM API 兼容性警告保持。 - 签名证书与 r14.5.0 一致;包名不变,可覆盖安装。
实机验证
- 完整重启后,无模块相关
AndroidRuntime/FATAL/am_crash/am_anr;tv.withaibuild.customiuizer.r14包正常安装,系统服务与 KernelSU 策略加载无异常。 - 控制中心关闭/开启移动数据后,双排信号栏 SIM1 信号显示正常;状态栏图标变黑/变白时双排信号图标颜色正确跟随。
- 日志中存在的
Invalid resource ID 0x00000000(ClockPalette)与ApkAssets弱引用警告均不含本模块调用栈,未追溯到 CustoMIUIzer 代码。 - 建议后续再抓一次开启全部作用域后的启动日志,以补全 r14.6.4 的加载数据。