Skip to content

r14.6.4

Choose a tag to compare

@tomthenpc tomthenpc released this 25 Jul 05:08

r14.6.4

发布日期:2026-07-25。状态:稳定版(r14.6.x 终版;合并 r14.6.2、r14.6.3;双排信号栏修复与生命周期治理已实机验证)

r14.6.2r14.6.3 已废弃并合并到本版本,对应 release/tag 已删除。本版本在 r14.6.3 基础上做最终收尾整理,未改动 Hook 逻辑。

r14.6.x 演进

  • r14.6.0 原始尝试
    • D 类废弃 API/权限迁移:将 Settings.System 自定义键(systemui_restart_timelast_music_paused_timedark_mode_enable_by_setting)迁移到模块 SharedPreferences;新增 Helpers.getSystemSharedPrefs()
    • PendingIntent flag 兼容辅助:在 Helpers 中新增 getMutableActivityPendingIntent / getImmutableActivityPendingIntent
    • 通知渠道:MainApplication.onCreate 创建默认低重要性 NotificationChannel(ID customiuizer_default)。
    • 权限声明:AndroidManifest.xml 新增 WAKE_LOCKPOST_NOTIFICATIONS
  • 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.0r14.6.1 release 与 tag(两个版本均已废弃或合并)。
    • 合并 r14.6.0/14.6.1 变更记录到本版本。
    • 移除 Helpers.java 中未使用的 android.content.SharedPreferences 导入。
    • 移除 AndroidManifest.xml 中未使用的 POST_NOTIFICATIONS 权限声明;WAKE_LOCK 仍保留(Controls.java 实际使用 WakeLock)。
    • 重写 README.md,新增“各版本全方位对比”表。
  • r14.6.3 最终修复
    • ClassNotFound 异常回退XposedHelpers.findClassInternal 在类加载器无法找到类时,增加对 Application 层 ClassLoader 的回退查找,减少 systemui/keyguard 内部类加载失败。
    • Owner 级 PreferenceObserver 管理ModuleHelper 新增 observePreferenceChange(PreferenceObserver, Object)removePreferenceObserver(Object),支持以生命周期宿主为 owner 注册/注销偏好监听,避免静态观察者重复注册与内存泄漏。
    • Controls.java 长按回调治理NavBarActionsHookpostDelayed 之前先 removeCallbacks,防止导航键长按 Runnable 重复堆积。
    • Launcher.java 生命周期治理
      • RenameShortcutsHook 使用 owner 方式注册 PreferenceObserver,并在 onDestroy 中移除。
      • PrivacyFolderHooksetupLauncherBroadcastReceiver 改为具名变量、先注销旧实例再注册,并在 onDestroy 中统一清理。
    • System.java 生命周期治理
      • 所有 observePreferenceChange 调用改为以 thisObject 为 owner 注册。
      • KeyguardSecurityContainerControllerKeyguardViewMediatorBluetoothControllerImplMiuiPhoneStatusBarPolicy 等处的匿名 BroadcastReceiver 先注销旧实例再注册,避免重复。
      • HeadsUpManagermRemoveAlertRunnableMultiWindowPlusHookExpandHeadsUpHookpostDelayed 在发送前移除旧回调或复用 stored runnable,防止重复与泄漏。
    • SystemUI.java 方法拆分:将 MonitorDeviceInfoHookAddCustomTileHook 提取到 SystemUIMonitorAndTileHooks.javaSystemUI.java 保留委托 stub;通过包级可见的 helper/field 共享解决跨类依赖,降低主文件行数与维护耦合。
    • 代码清理与质量修复:清理改动文件中的未使用 import、注释死代码;修复 SystemUIMonitorAndTileHooksDefaultLocaleDiscouragedApi lint 警告。
    • 单元测试补齐:新增 XposedHelpersCacheTestAppHelperTest(与已有 PrefMapTest 一起),覆盖 XposedHelpers 反射缓存、additional instance field 以及 AppHelper 的 preferences 工具方法。
    • 双排信号栏 SIM1 信号为空修复SystemUI.DualRowSignalHook 不再把 MobileIconState.strengthId 覆盖成等级数值,保留原始信号 drawable 资源 ID;在 applyDarknessInternalonDarkChanged 中通过 Resources.getResourceName 动态解析资源名得到等级,并绘制双排自定义图标。修复因 strengthId 被改为 1..5 后被 SystemUI setImageResource 当作无效资源 ID 加载,导致 SIM1 信号为空的问题。
    • 双排信号栏图标颜色跟随状态栏applyDualSignalDrawables 在设置自定义信号图标后,从 mMobileRoaming 读取当前 ImageTintList(未取到则按 mLight 回退黑白),并同步设置到 mMobilemSmallRoaming,修复状态栏图标变黑/变白时双排信号图标颜色不跟随的问题。
  • r14.6.4 最终整理
    • 大文件拆分(俄罗斯代码风格;保持原类委托 stub,调用方不变)
      • System.java:提取状态栏/时钟相关 hooks 到 SystemClockHooks.javaSystemStatusBarBackgroundHooks.javaSystemStatusBarIconHooks.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 补充 MainActivityCredentialsMainApplication 等 manifest 组件的 -keepnames
    • 依赖检查
      • 通过 dependencyUpdates 检查,当前配置仓库中无合适的安全稳定升级项,未升级 alpha/beta 依赖。

构建产物验证

  • versionCode 164 / versionName r14.6.4。
  • APK:CustoMIUIzer-A14-r14.6.4.apk,2,949,361 bytes,SHA-256: E7E6A23A04E709DF269DF1087FB3128435F532CF35BE53C1FE051595249B3280
  • 通过 gradlew testgradlew assembleReleaselintVitalRelease 0 错误,既有 ROM API 兼容性警告保持。
  • 签名证书与 r14.5.0 一致;包名不变,可覆盖安装。

实机验证

  • 完整重启后,无模块相关 AndroidRuntime/FATAL/am_crash/am_anrtv.withaibuild.customiuizer.r14 包正常安装,系统服务与 KernelSU 策略加载无异常。
  • 控制中心关闭/开启移动数据后,双排信号栏 SIM1 信号显示正常;状态栏图标变黑/变白时双排信号图标颜色正确跟随。
  • 日志中存在的 Invalid resource ID 0x00000000ClockPalette)与 ApkAssets 弱引用警告均不含本模块调用栈,未追溯到 CustoMIUIzer 代码。
  • 建议后续再抓一次开启全部作用域后的启动日志,以补全 r14.6.4 的加载数据。