Releases: tomthenpc/customiuizer-a14
Release list
r14.8.0
r14.8.0 — 基础设施 / 工具类 Kotlin 化
发布日期:2026-07-25。状态:已发布 / 稳定版(实机重启验证通过,无模块相关崩溃/ANR)。
将全项目引用的
utils与mods.utils基础设施类迁移为 Kotlin,为核心mods主类 Kotlin 化铺路。功能行为无变化,重点保持 Java/Kotlin 互调用兼容、测试覆盖与构建稳定。
迁移范围
utils.Helpers.java→Helpers.kt(已完成)utils.AppHelper.java→AppHelper.kt(已完成)mods.utils.ModuleHelper.java→ModuleHelper.kt(已完成)mods.utils.HookerClassHelper.java→HookerClassHelper.kt(已完成)mods.utils.ResourceHooks.java→ResourceHooks.kt(已完成)mods.utils.ShakeManager.java→ShakeManager.kt(已完成)ResourceConstants.java→ResourceConstants.kt(已完成)- 测试
AppHelperTest、PrefMapTest、XposedHelpersCacheTest改为 Kotlin(已完成)。
构建验证
versionCode170 /versionNamer14.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.SpinnerEx与android:entries;SortableListView对Drawable.alpha的Int取值(0–255)的 lintRange误报加@SuppressLint;GlobalActionsIntentHelper中intent.addFlags(335544320)替换为Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP。
- lint 最终 0 error;release APK 构建成功。
r14.7.4
r14.7.4 — r14.7.x 系列合并整理
发布日期:2026-07-25。状态:稳定版(完整重启验证通过,无模块相关崩溃/ANR)。
本版本合并 r14.7.0–r14.7.3 的全部内部重构与修复内容,并对项目进行最终清理与代码质量审查。对外功能与行为无变化,可作为 r14.7 系列的唯一稳定发布。
合并内容摘要
- r14.7.0 — Kotlin 协程化重构:
BitmapCachedLoader、WeatherDataController、StepCounterController、AudioVisualizer、BatteryIndicator、BTList/WiFiList等从 Java 并发机制迁移到 Kotlin Coroutines;引入kotlinx-coroutines-android。 - r14.7.1 — 子页面/选择器协程化:
ActivitySelector、AppSelector、SubFragmentWithSearch、SubFragment、MainFragment迁移;统一使用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;迁移MainActivity、MainApplication、适配器/工具类等低风险小文件。
r14.7.4 最终整理
- 清理项目根目录废弃构建产物、构建日志与旧版 APK。
- 审查重启日志:无模块相关
AndroidRuntime/FATAL/am_crash/am_anr;VectorModuleManager加载成功;system 侧ActivityManagerWrapper/WorldCirculate报错与 SELinux 审计均不追溯到本模块代码。 - 更新
CHANGELOG.md与README.md状态,将 r14.7.0–r14.7.3 标记为已合并到 r14.7.4。
构建产物验证
versionCode169 /versionNamer14.7.4。- APK:
CustoMIUIzer-A14-r14.7.4.apk,3,048,687 bytes,SHA-256:1B2026B6FFAEE33C3BE50E4695EE8BF19EAA6740124A199153D89C63251F2329。 - 通过
./gradlew assembleRelease;lintVitalRelease0 错误,仅有 ROM API 兼容性既有警告。 - 签名证书与
r14.7.3一致;包名不变,可覆盖安装。
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 的加载数据。
r14.5.0
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、ShortcutstargetClass/targetPackage、Tasker 组件、proguard-rules.pro的 keep 规则统一替换为tv.withaibuild.customiuizer。 app/build.gradle:namespace与applicationId同步改为tv.withaibuild.customiuizer/tv.withaibuild.customiuizer.r14;versionCode150 /versionNamer14.5.0。META-INF/xposed/java_init.list入口类改为tv.withaibuild.customiuizer.MainModule。
A 类静态清理
AboutFragment、System.java、SystemUI.java、SeekBarPreference、ColorSelector中的String.format(Locale.getDefault(), ...)/ 无 LocaleString.format(...)统一指定Locale.US,避免默认 locale 影响数值格式。AppDataAdapter、LockedAppAdapter、ModSearchAdapter、PrivacyAppAdapter、ResolveInfoAdapter、SortableList的String.toLowerCase()统一指定Locale.ROOT,保证过滤比较不受 locale 大小写规则影响。MainActivity重置设置弹窗中的SharedPreferences.commit()改为apply(),避免阻塞 UI 线程。GlobalActions、Various、BTList、WiFiList的new Handler()改为new Handler(Looper.getMainLooper()),防止在无线程 Looper 的 Hook/后台线程上创建 Handler。
B 类生命周期加固
Controls、GlobalActions、Launcher、System、Various、WiFiList中缺少导出标志的registerReceiver(..., IntentFilter)调用统一补全Context.RECEIVER_EXPORTED/Context.RECEIVER_NOT_EXPORTED。- 系统广播(
SCREEN_ON、TIME_SET、TIME_TICK、TIMEZONE_CHANGED、LOCALE_CHANGED、WifiManager、BATTERY_CHANGEDsticky)使用RECEIVER_NOT_EXPORTED。 - 模块自定义动作广播(
GlobalActions自定义ACTION_PREFIX事件、FETCHAPPCONFIG、PUSHAPPCONFIG)使用RECEIVER_EXPORTED。 - 不影响已带
RECEIVER_*标志的现有注册点。
C 类性能缓存
Helpers.java新增线程安全的getResId(Resources, name, defType, defPackage)缓存,使用ConcurrentHashMap缓存Resources.getIdentifier()结果。System.java与SystemUI.java中高频getResources().getIdentifier(...)/res.getIdentifier(...)调用全部收敛到Helpers.getResId(),减少 SystemUI/设置进程初始化与状态栏刷新热路径上的重复资源 ID 查找。- 缓存键包含包名、资源类型与资源名,命中时直接返回缓存整型 ID;参数任一为空时返回 0,避免无效调用。
构建产物验证
versionCode150 /versionNamer14.5.0。- APK:
CustoMIUIzer-A14-r14.5.0.apk,2,886,373 bytes,SHA-256:DCB9EBC4BBE7AEE721B58F83B5371E1030AD7CAB0C4FE6CC4EAD900C420E8C93。 - 通过
gradlew assembleRelease;lintVitalRelease0 错误,既有 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
r14.3.1
发布日期:2026-07-24。状态:稳定版,构建产物通过 assembleRelease,可直接覆盖 r14.2.9 及更早版本升级。
锁屏充电数据
System.ChargingInfoHook新增isKeyguardIndicationCaller()栈追踪判断,仅对KeyguardIndicationController调用路径修改ChargeUtils.getChargingHintText返回结果,避免充电动画/充电视图等其他调用方显示同一行数据。- 增加
isChargingInfoHooked静态防护,防止同一进程内重复注册getChargingHintTextHook。 - 在拼接信息前检查
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-bom至2.2.21。
减少无效 Hook 与资源替换
- 新增
SystemUI.hasStatusBarModifications(),汇总setupStatusBar中所有资源替换与状态栏文本图标开关条件,包括状态栏边距、控制中心样式、音量计时器、图标大小、步数显示、抽屉日期、点击解锁、锁屏超时、电池/设备温度等。 MainModule在SystemUIInitializer.init中仍注册初始化 Hook,但SystemUI.setupStatusBar内部先判断hasStatusBarModifications();无任何相关功能开启时,仅写入systemui_restart_time标记,不调用addFakeResource和setThemeValueReplacement/setResReplacement。- 避免 SystemUI 每次启动时加载
statusbar_text_icon假资源,以及反复替换status_bar_padding_top等默认资源,降低功能关闭时的内存与跨进程写入开销。
统一线程与生命周期治理
WeatherDataController不再在每次TIME_TICK触发时new Thread()查询天气,改为进程内单一ExecutorService队列后台查询,减少每分钟新建线程与栈内存抖动。WeatherDataController的Handler改为静态Looper.getMainLooper()实例,避免forceRefresh分支重复创建new Handler。WeatherDataController在initContext重复进入时先unregisterReceiver旧TIME_TICK接收者,再注册新接收者,并显式指定Context.RECEIVER_NOT_EXPORTED。
构建产物验证
versionCode130 /versionNamer14.3.1。- APK:
CustoMIUIzer-A14-r14.3.1.apk,2,886,165 bytes,SHA-256:E1ED1FEF9108E9A94D1B532F5B3BCDBD71AF5DC32E610A239CF108A9ABEC57D8。 - 通过
gradlew assembleRelease;lintRelease0 错误,既有 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
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 重建)时先注销旧接收者再注册新接收者,防止接收者泄漏与重复查询步数。StepCounterController的Handler改用mContext.getMainLooper(),避免在无线程 Looper 的 Hook 线程上创建Handler失败。StepCounterController.removeStepViewByTag改用ArrayList.removeIf(),消除for循环中remove()可能触发的并发修改异常。
绘制热路径
BatteryIndicator.updateDisplaySize缓存mDensity与mStatusBarHeight,updateDrawable不再每次绘制时查询Resources.getDisplayMetrics()和解析status_bar_height资源 ID。BatteryIndicator.updateParameters移除每次调用时新建的Matrix对象,改为setImageMatrix(null)复用默认矩阵。
构建产物验证
versionCode127 /versionNamer14.2.9。- APK:
CustoMIUIzer-A14-r14.2.9.apk,2,886,165 B。 - SHA-256:
dabc71b2e5b5353f03ddf2ba513567888b6f87fc8f71994c3122dc3304cf6e10。 - 通过
gradlew test与gradlew assembleRelease;3 项单元测试通过,lintRelease0 错误、既有 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.mSBReceiverOpenVolumeDialog分支内被错误嵌套、永远不会执行的ToggleZenMode/ToggleNightMode子分支;这两个动作已由顶层分支正确处理。
r14.1.3
r14.1.3 — 稳定性修复、轻量化与资源治理(合并 r14.1.0-r14.1.3)
发布日期:2026-07-23。状态:稳定版,已完成目标设备实机验证。
API 101 与 Hook 稳定性
- 修复 Release 混淆后全部
afterHook 被跳过的问题。旧适配层依赖会被 R8 改写的回调方法名;现在改为按返回类型和参数签名识别。 - 恢复依赖后置回调的 Launcher 初始化、最近任务背景模糊与清理按钮、控制中心运营商隐藏、主题样式和图标颜色更新。
- 保持
GlobalActions、Controls、Launcher、System、Various使用原生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)调度。 - 首批迁移
GlobalActions与Controls;其他模块暂由兼容层承接。 - 保留旧 Hook 的可变参数、提前返回、结果替换、异常传播与后置回调语义。
- 建立逐模块迁移、构建、重启、回归验证流程,避免一次性重写整个 Hook 层。
r14.1.1 累积变更
- 将
Launcher、System、Various分模块迁移至intercept(Chain),每步执行重启验证。 SystemUI全量迁移后出现重启失效,因此回退到兼容层;这一实机结论成为后续版本的稳定性边界。HookBuilder显式使用ExceptionMode.PASSTHROUGH,保持被 Hook 方法的异常传播语义。- 完成 clean build、zipalign 与 APK v2 签名验证。
r14.1.2 累积变更
- 恢复到用户确认可打开应用、重启后可正常 Hook 的 Devin 最终构建,作为 r14.1.3 开发的干净基线。
- 固定 API 101 混合架构边界:
GlobalActions、Controls、Launcher、System、Various使用原生拦截器,SystemUI 保留兼容层。 - 保持普通应用启动链与 Hook API 隔离,避免 AndroidX 初始化直接加载仅存在于注入环境的类型。
versionCode 116,APK 2,934,628 B。- SHA-256:
a46acee41da42c618ee0f23468bb37574faedbfb4f9a5df6b26b678106dd32ea。
r14.0.0
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 早退。