Skip to content

Releases: tomthenpc/customiuizer-a14

r14.8.0

Choose a tag to compare

@tomthenpc tomthenpc released this 25 Jul 14:55

r14.8.0 — 基础设施 / 工具类 Kotlin 化

发布日期:2026-07-25。状态:已发布 / 稳定版(实机重启验证通过,无模块相关崩溃/ANR)

将全项目引用的 utilsmods.utils 基础设施类迁移为 Kotlin,为核心 mods 主类 Kotlin 化铺路。功能行为无变化,重点保持 Java/Kotlin 互调用兼容、测试覆盖与构建稳定。

迁移范围

  • utils.Helpers.javaHelpers.kt(已完成)
  • utils.AppHelper.javaAppHelper.kt(已完成)
  • mods.utils.ModuleHelper.javaModuleHelper.kt(已完成)
  • mods.utils.HookerClassHelper.javaHookerClassHelper.kt(已完成)
  • mods.utils.ResourceHooks.javaResourceHooks.kt(已完成)
  • mods.utils.ShakeManager.javaShakeManager.kt(已完成)
  • ResourceConstants.javaResourceConstants.kt(已完成)
  • 测试 AppHelperTestPrefMapTestXposedHelpersCacheTest 改为 Kotlin(已完成)。

构建验证

  • versionCode 170 / versionName r14.8.0。
  • 每迁一个文件后执行 ./gradlew :app:compileDebugJavaWithJavac / :app:test
  • 保持签名证书、包名与上一版一致,可覆盖安装。

实机验证与发布整理

  • 实机重启日志审查:VectorModuleManager 成功加载 tv.withaibuild.customiuizer.r14;无 am_crash / am_anr / AndroidRuntime 模块崩溃;FATAL 均为 init 进程系统级信号,与模块无关。
  • 清理项目根目录旧版 APK、构建日志与临时文件;删除 app/build 中本次生成的 r14.8.0_*.log / .exit / .pid
  • 运行 ./gradlew :app:lint 并修复全部 5 个 error:
    • MainFragment.onCreate 自定义 super.onCreate(Bundle, Int) 调用被 lint 误判为缺失 super call,使用 @SuppressLint 说明;
    • SpinnerEx 改为使用 R.styleable.SpinnerExandroid:entries
    • SortableListViewDrawable.alphaInt 取值(0–255)的 lint Range 误报加 @SuppressLint
    • GlobalActionsIntentHelperintent.addFlags(335544320) 替换为 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
  • lint 最终 0 error;release APK 构建成功。

r14.7.4

Choose a tag to compare

@tomthenpc tomthenpc released this 25 Jul 11:58

r14.7.4 — r14.7.x 系列合并整理

发布日期:2026-07-25。状态:稳定版(完整重启验证通过,无模块相关崩溃/ANR)

本版本合并 r14.7.0–r14.7.3 的全部内部重构与修复内容,并对项目进行最终清理与代码质量审查。对外功能与行为无变化,可作为 r14.7 系列的唯一稳定发布。

合并内容摘要

  • r14.7.0 — Kotlin 协程化重构BitmapCachedLoaderWeatherDataControllerStepCounterControllerAudioVisualizerBatteryIndicatorBTList/WiFiList 等从 Java 并发机制迁移到 Kotlin Coroutines;引入 kotlinx-coroutines-android
  • r14.7.1 — 子页面/选择器协程化ActivitySelectorAppSelectorSubFragmentWithSearchSubFragmentMainFragment 迁移;统一使用 lifecycleScope
  • r14.7.2 — UI 适配器与控件 Kotlin 化:列表适配器 ViewHolder 化;ColorCircle 等偏好控件与全部小 subs 迁移;PreferenceState 接口 Kotlin 化;ColorCircle 启用硬件图层。
  • r14.7.3 — 动画缩放 hidden API 修复与小文件 Kotlin 迁移Helpers.getAnimationScale/setAnimationScale 改用 Settings.Global 公共 API 并回退 su;新增 WRITE_SECURE_SETTINGS;迁移 MainActivityMainApplication、适配器/工具类等低风险小文件。

r14.7.4 最终整理

  • 清理项目根目录废弃构建产物、构建日志与旧版 APK。
  • 审查重启日志:无模块相关 AndroidRuntime/FATAL/am_crash/am_anrVectorModuleManager 加载成功;system 侧 ActivityManagerWrapper/WorldCirculate 报错与 SELinux 审计均不追溯到本模块代码。
  • 更新 CHANGELOG.mdREADME.md 状态,将 r14.7.0–r14.7.3 标记为已合并到 r14.7.4。

构建产物验证

  • versionCode 169 / versionName r14.7.4。
  • APK:CustoMIUIzer-A14-r14.7.4.apk,3,048,687 bytes,SHA-256: 1B2026B6FFAEE33C3BE50E4695EE8BF19EAA6740124A199153D89C63251F2329
  • 通过 ./gradlew assembleReleaselintVitalRelease 0 错误,仅有 ROM API 兼容性既有警告。
  • 签名证书与 r14.7.3 一致;包名不变,可覆盖安装。

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 的加载数据。

r14.5.0

Choose a tag to compare

@tomthenpc tomthenpc released this 24 Jul 13:12

r14.5.0

发布日期:2026-07-24。状态:稳定版,构建产物通过 assembleRelease,完整重启后日志中无模块相关 AndroidRuntime/FATAL/am_crash/am_anr

包名与工程结构迁移

  • Java 源码目录从 name/monwf/customiuizer 整体迁移到 tv/withaibuild/customiuizer
  • 所有 Java package/import、XML 组件 android:name、Preference 屏幕 class、Shortcuts targetClass/targetPackage、Tasker 组件、proguard-rules.pro 的 keep 规则统一替换为 tv.withaibuild.customiuizer
  • app/build.gradlenamespaceapplicationId 同步改为 tv.withaibuild.customiuizer / tv.withaibuild.customiuizer.r14versionCode 150 / versionName r14.5.0。
  • META-INF/xposed/java_init.list 入口类改为 tv.withaibuild.customiuizer.MainModule

A 类静态清理

  • AboutFragmentSystem.javaSystemUI.javaSeekBarPreferenceColorSelector 中的 String.format(Locale.getDefault(), ...) / 无 Locale String.format(...) 统一指定 Locale.US,避免默认 locale 影响数值格式。
  • AppDataAdapterLockedAppAdapterModSearchAdapterPrivacyAppAdapterResolveInfoAdapterSortableListString.toLowerCase() 统一指定 Locale.ROOT,保证过滤比较不受 locale 大小写规则影响。
  • MainActivity 重置设置弹窗中的 SharedPreferences.commit() 改为 apply(),避免阻塞 UI 线程。
  • GlobalActionsVariousBTListWiFiListnew Handler() 改为 new Handler(Looper.getMainLooper()),防止在无线程 Looper 的 Hook/后台线程上创建 Handler。

B 类生命周期加固

  • ControlsGlobalActionsLauncherSystemVariousWiFiList 中缺少导出标志的 registerReceiver(..., IntentFilter) 调用统一补全 Context.RECEIVER_EXPORTED / Context.RECEIVER_NOT_EXPORTED
  • 系统广播(SCREEN_ONTIME_SETTIME_TICKTIMEZONE_CHANGEDLOCALE_CHANGEDWifiManagerBATTERY_CHANGED sticky)使用 RECEIVER_NOT_EXPORTED
  • 模块自定义动作广播(GlobalActions 自定义 ACTION_PREFIX 事件、FETCHAPPCONFIGPUSHAPPCONFIG)使用 RECEIVER_EXPORTED
  • 不影响已带 RECEIVER_* 标志的现有注册点。

C 类性能缓存

  • Helpers.java 新增线程安全的 getResId(Resources, name, defType, defPackage) 缓存,使用 ConcurrentHashMap 缓存 Resources.getIdentifier() 结果。
  • System.javaSystemUI.java 中高频 getResources().getIdentifier(...) / res.getIdentifier(...) 调用全部收敛到 Helpers.getResId(),减少 SystemUI/设置进程初始化与状态栏刷新热路径上的重复资源 ID 查找。
  • 缓存键包含包名、资源类型与资源名,命中时直接返回缓存整型 ID;参数任一为空时返回 0,避免无效调用。

构建产物验证

  • versionCode 150 / versionName r14.5.0。
  • APK:CustoMIUIzer-A14-r14.5.0.apk,2,886,373 bytes,SHA-256: DCB9EBC4BBE7AEE721B58F83B5371E1030AD7CAB0C4FE6CC4EAD900C420E8C93
  • 通过 gradlew assembleReleaselintVitalRelease 0 错误,既有 ROM API 兼容性警告保持。
  • 签名证书与 r14.3.1 一致,包名不同不能覆盖安装旧包名版本,需先卸载旧模块并重新启用作用域。

实机验证

  • LSPosed_2026-07-24T21_24_25.003081 完整重启后,VectorModuleService 已向 tv.withaibuild.customiuizer.r14 发送模块 binder,日志中无模块相关 AndroidRuntime/FATAL/am_crash/am_anr
  • SystemUI、Launcher、Settings 等目标进程无 CustoMIUIzer 引发的崩溃、ANR 或异常栈。

r14.3.1

Choose a tag to compare

@tomthenpc tomthenpc released this 24 Jul 01:02

r14.3.1

发布日期:2026-07-24。状态:稳定版,构建产物通过 assembleRelease,可直接覆盖 r14.2.9 及更早版本升级

锁屏充电数据

  • System.ChargingInfoHook 新增 isKeyguardIndicationCaller() 栈追踪判断,仅对 KeyguardIndicationController 调用路径修改 ChargeUtils.getChargingHintText 返回结果,避免充电动画/充电视图等其他调用方显示同一行数据。
  • 增加 isChargingInfoHooked 静态防护,防止同一进程内重复注册 getChargingHintText Hook。
  • 在拼接信息前检查 hint.contains(info),若原始提示文本已包含相同数据则不再追加,杜绝同一字符串内出现两行重复充电数据。

代码清理与依赖优化

  • PreferenceFragmentBase: SimpleDateFormat 指定 Locale.US,避免依赖默认 locale。
  • AppDataAdapter: String.toLowerCase() 指定 Locale.ROOT
  • Various: 广播接收器中的 SharedPreferences.commit() 改为 apply()
  • BatteryIndicator: 缓存 status_bar_height 资源 ID,减少重复 getIdentifier 调用。
  • build.gradle: 升级 com.github.ben-manes.versions 插件至 0.54.0
  • app/build.gradle: 升级 kotlin-bom2.2.21

减少无效 Hook 与资源替换

  • 新增 SystemUI.hasStatusBarModifications(),汇总 setupStatusBar 中所有资源替换与状态栏文本图标开关条件,包括状态栏边距、控制中心样式、音量计时器、图标大小、步数显示、抽屉日期、点击解锁、锁屏超时、电池/设备温度等。
  • MainModuleSystemUIInitializer.init 中仍注册初始化 Hook,但 SystemUI.setupStatusBar 内部先判断 hasStatusBarModifications();无任何相关功能开启时,仅写入 systemui_restart_time 标记,不调用 addFakeResourcesetThemeValueReplacement/setResReplacement
  • 避免 SystemUI 每次启动时加载 statusbar_text_icon 假资源,以及反复替换 status_bar_padding_top 等默认资源,降低功能关闭时的内存与跨进程写入开销。

统一线程与生命周期治理

  • WeatherDataController 不再在每次 TIME_TICK 触发时 new Thread() 查询天气,改为进程内单一 ExecutorService 队列后台查询,减少每分钟新建线程与栈内存抖动。
  • WeatherDataControllerHandler 改为静态 Looper.getMainLooper() 实例,避免 forceRefresh 分支重复创建 new Handler
  • WeatherDataControllerinitContext 重复进入时先 unregisterReceiverTIME_TICK 接收者,再注册新接收者,并显式指定 Context.RECEIVER_NOT_EXPORTED

构建产物验证

  • versionCode 130 / versionName r14.3.1。
  • APK:CustoMIUIzer-A14-r14.3.1.apk,2,886,165 bytes,SHA-256: E1ED1FEF9108E9A94D1B532F5B3BCDBD71AF5DC32E610A239CF108A9ABEC57D8
  • 通过 gradlew assembleReleaselintRelease 0 错误,既有 ROM API 兼容性警告保持。
  • libxposed 保持 API 101,未升级到 102,避免运行时兼容风险。
  • 签名证书与 r14.2.9 一致,可直接覆盖升级。

实机验证

  • LSPosed_2026-07-24T13_52_32.282030 完整重启后,VectorModuleManager 两次加载 tv.withaibuild.customiuizer.r14 分别为 6 ms 与 24 ms,日志中无模块相关 AndroidRuntime/FATAL/am_crash/am_anr
  • SystemUI、Launcher、Settings 等目标进程无 CustoMIUIzer 引发的崩溃、ANR 或异常栈。

r14.2.9

Choose a tag to compare

@tomthenpc tomthenpc released this 23 Jul 12:58

r14.2.9 — r14.2.x 系列合并整理

发布日期:2026-07-23。状态:稳定版(r14.2 系列唯一发布,完整重启验证通过)

本版本合并 r14.2.1–r14.2.8 的全部热路径优化、生命周期治理、无效 Hook/监听清理与绘制缓存,作为 r14.2 系列唯一稳定发布。r14.2.0、r14.2.4、r14.2.7 的历史内容已整合到本版本中。

生命周期与线程调度

  • StepCounterController.initContext 改为静态持有 TIME_TICK 广播接收者,重复进入(如 SystemUI 重建)时先注销旧接收者再注册新接收者,防止接收者泄漏与重复查询步数。
  • StepCounterControllerHandler 改用 mContext.getMainLooper(),避免在无线程 Looper 的 Hook 线程上创建 Handler 失败。
  • StepCounterController.removeStepViewByTag 改用 ArrayList.removeIf(),消除 for 循环中 remove() 可能触发的并发修改异常。

绘制热路径

  • BatteryIndicator.updateDisplaySize 缓存 mDensitymStatusBarHeightupdateDrawable 不再每次绘制时查询 Resources.getDisplayMetrics() 和解析 status_bar_height 资源 ID。
  • BatteryIndicator.updateParameters 移除每次调用时新建的 Matrix 对象,改为 setImageMatrix(null) 复用默认矩阵。

构建产物验证

  • versionCode 127 / versionName r14.2.9。
  • APK:CustoMIUIzer-A14-r14.2.9.apk,2,886,165 B。
  • SHA-256:dabc71b2e5b5353f03ddf2ba513567888b6f87fc8f71994c3122dc3304cf6e10
  • 通过 gradlew testgradlew assembleRelease;3 项单元测试通过,lintRelease 0 错误、既有 ROM API 兼容性警告保持。
  • 签名证书与 r14.2.7 一致,可直接覆盖升级。

r14.2.8 累积变更

热路径与偏好监听

  • MainModule 偏好变化监听不再每次调用 sharedPreferences.getAll() 复制整个远程偏好表,改为根据 PrefMap 中已有值类型直接调用 getBoolean/getInt/getString/getLong/getFloat/getStringSet 单次读取;未命中或新键时回退到 getAll(),显著降低设置项调整时的内存与 CPU 开销。
  • GlobalActions.setupStatusBar 内的 MiuiFreeformModeController(PinningWindow,动作码 28)、SoScSplitScreenController(SplitScreen,动作码 29)与 AutoBrightnessController(ToggleAutoBrightness,toggle 6)Hook 不再在任意自定义动作开启时全部注册,仅在对应动作被配置时才注册,进一步减少 com.android.systemui 中的无效 Hook 与 BroadcastReceiver。

无效/失效代码清理

  • 移除 GlobalActions.mSBReceiver OpenVolumeDialog 分支内被错误嵌套、永远不会执行的 ToggleZenMode / ToggleNightMode 子分支;这两个动作已由顶层分支正确处理。

r14.1.3

Choose a tag to compare

@tomthenpc tomthenpc released this 22 Jul 13:04
657a409

r14.1.3 — 稳定性修复、轻量化与资源治理(合并 r14.1.0-r14.1.3)

发布日期:2026-07-23。状态:稳定版,已完成目标设备实机验证

API 101 与 Hook 稳定性

  • 修复 Release 混淆后全部 after Hook 被跳过的问题。旧适配层依赖会被 R8 改写的回调方法名;现在改为按返回类型和参数签名识别。
  • 恢复依赖后置回调的 Launcher 初始化、最近任务背景模糊与清理按钮、控制中心运营商隐藏、主题样式和图标颜色更新。
  • 保持 GlobalActionsControlsLauncherSystemVarious 使用原生 intercept(Chain);SystemUI 继续使用已验证兼容层,避免再次扩大迁移风险。
  • 保持 Xposed 回调类型与 AndroidX 普通启动链隔离,修复“重启后 Hook 生效,但设置应用打不开”的回归。
  • 修复 SystemUI 开机创建移动网络图标时,mState 尚未赋值便被双卡信号 Hook 读取的问题;缺失状态、视图或资源时直接放行原方法。
  • Android 14 动态广播显式设置导出标志;Wi-Fi 扫描结果读取增加权限拒绝兜底。

代码与资源优化

  • 将 4 类应用列表各自创建的无界线程池合并为一个共享有界池:2–4 个后台线程、15 秒空闲回收、最大等待队列 128。
  • 将图标 LRU 缓存由“最多占 Java 堆的一半”改为 1–16 MiB 的有界缓存,降低内存峰值和回收压力。
  • 移除低内存路径中的主动 Runtime.gc(),避免人为制造全局停顿。
  • 音频可视化的静音 FFT 判断由每个频段一次改为每帧一次;31 个频段的静音帧最多从 31 次扫描降为 1 次。
  • 专辑图重复检查不再在主线程逐像素调用 Bitmap.sameAs()
  • 常量 Hook、反射和资源访问沿用已建立的缓存/快速路径,不新增后台服务、定时任务或持续轮询。

轻量化

  • 移除“支持”区域中的版本下载、代码仓库、微信与 PayPal 赞赏入口。
  • 删除仅服务于这些入口的 WebView 页面、布局、图片、菜单和多语言文案。
  • 移除应用的 INTERNET 权限;保留开机广播、蓝牙、Wi-Fi、跨用户和 Hook 所需权限。
  • 删除上游赞助配置与失效的 Crowdin 工作流。

实机与日志验证

  • 用户已验证应用可打开、卸载重装后可用、完整重启后 Hook 正常。
  • 已验证最近任务背景模糊/清理按钮、控制中心运营商隐藏、控制中心主题和图标颜色等此前回归功能。
  • 首轮日志曾记录双卡信号视图初始化期间 21 次同源空指针,已映射到 SystemUI.java;增加状态、视图和资源空值保护后不再复现。
  • 最终复验归档 LSPosed_2026-07-23T02_46_07.858483 包含 02:41 与 02:43 两轮启动记录,两轮 [Pengeek] 异常均为 0,各作用域进程均显示模块加载成功。
  • 当前启动周期中 SystemUI、桌面和设置应用均只启动 1 次、进程死亡 0 次;设置应用成功进入前台,未发现本应用或 SystemUI 的崩溃、ANR 和隐性重启。
  • SELinux 中的 Xiaomi 显示属性/RenderThread 探测也出现在 Gmail、DocumentsUI 等普通应用;微信、钉钉和 XSmsCode 的 Hook 报错属于其他模块,均不计入本项目缺陷。
  • 最终结论:r14.1.3 通过安装、启动、完整重启、常用功能与重启日志闭环验证,可作为稳定发布版本。

相对 r14.1.2 的静态评估

指标 r14.1.2 r14.1.3 结论
APK 大小 2,934,628 B 2,886,250 B 减少 48,378 B(1.65%)
应用网络权限 删除模块自身联网能力
图标执行器 每个 Adapter 独立、队列无界 单个共享有界池、队列 128 限制线程竞争与任务积压
图标缓存 最大堆的 1/2 1–16 MiB 限制内存峰值
主动 GC 低内存时调用 已移除 降低人为停顿风险
静音 FFT 判断 每频段一次 每帧一次 减少空闲帧计算
Hook 架构 已验证的 API 101 混合架构 保持边界并修复 R8 回归 不扩大兼容面

这是代码路径与构建产物对比,不等同于实机功耗跑分。实际耗电、启动耗时和兼容性仍应在同设备、同 ROM、同作用域下长期对照。

构建产物验证

  • 通过 clean assembleRelease lintRelease lintVitalRelease,无阻断性 Lint 错误。
  • 通过 R8、资源压缩、zipalign、APK v2 签名与证书一致性检查。
  • 版本:versionCode 117 / versionName r14.1.3
  • APK:CustoMIUIzer-A14-r14.1.3.apk,2,886,250 B。
  • SHA-256:17d1f71607e06e5beb7939c17819932e558bd34c622f369ea87bebfe7b0eba57

r14.1.0 累积变更

  • MethodHook 直接实现 XposedInterface.Hooker,使用 intercept(Chain) 调度。
  • 首批迁移 GlobalActionsControls;其他模块暂由兼容层承接。
  • 保留旧 Hook 的可变参数、提前返回、结果替换、异常传播与后置回调语义。
  • 建立逐模块迁移、构建、重启、回归验证流程,避免一次性重写整个 Hook 层。

r14.1.1 累积变更

  • LauncherSystemVarious 分模块迁移至 intercept(Chain),每步执行重启验证。
  • SystemUI 全量迁移后出现重启失效,因此回退到兼容层;这一实机结论成为后续版本的稳定性边界。
  • HookBuilder 显式使用 ExceptionMode.PASSTHROUGH,保持被 Hook 方法的异常传播语义。
  • 完成 clean build、zipalign 与 APK v2 签名验证。

r14.1.2 累积变更

  • 恢复到用户确认可打开应用、重启后可正常 Hook 的 Devin 最终构建,作为 r14.1.3 开发的干净基线。
  • 固定 API 101 混合架构边界:GlobalActionsControlsLauncherSystemVarious 使用原生拦截器,SystemUI 保留兼容层。
  • 保持普通应用启动链与 Hook API 隔离,避免 AndroidX 初始化直接加载仅存在于注入环境的类型。
  • versionCode 116,APK 2,934,628 B。
  • SHA-256:a46acee41da42c618ee0f23468bb37574faedbfb4f9a5df6b26b678106dd32ea

r14.0.0

Choose a tag to compare

@tomthenpc tomthenpc released this 20 Jul 01:57

r14.0.0 — Android 14 / API 101 独立版本线

发布日期:2026-07-20。

  • 以 MonwF/customiuizer v24.10.12 为 Android 14 功能参考,建立独立维护、构建和发布版本线。
  • 将 Hook 接口更新到 libxposed API 101,并把初始化范围限制为 Android 14,避免向 Android 15/16 的未知系统组件注册。
  • applicationId 调整为 name.monwf.customiuizer.r14,与参考版本的安装身份区分。
  • 完成首轮性能整理:类与参数缓存、Context/资源复用、主题值预解析、常量 Hook 快速路径、依赖实例缓存和资源 Hook 早退。