主动安全模式是什么、什么时候触发、怎么恢复
为什么需要安全模式
Xposed 模块的 Hook 代码如果写错了(类找不到、方法签名变了、空指针),会在目标进程里抛异常。如果这个目标进程是 systemui 或 system 这种系统核心进程,持续崩溃会导致设备启动不了、卡在启动画面上。
HyperCeiler 从 2.6.161 版本起引入了主动安全模式:它会监控每个作用域进程的崩溃频率,当某个进程短时间内因为模块触发了 3 次以上崩溃时,自动禁用该作用域的 Hook,让系统先正常起来,再等你手动排查。
安全模式什么时候触发
常见触发场景:
- 装错分支——OS3 分支装到 HyperOS 2 上,很多 Hook 目标方法签名完全不同
- 系统更新后——HyperOS 小版本更新(比如从 2.0.100 升到 2.0.200)可能改了某些内部方法,Hook 代码还没适配
- 打开了有问题的功能组合——比如同时启用了多个互相冲突的 UI 定制功能
进入安全模式后的表现
- HyperCeiler App 右上角会出现一个安全模式徽章
- 之前启用的部分功能开关会被自动关闭(App 内显示为灰色不可操作)
- 对应作用域不再注入 Hook,系统恢复到"没装 HyperCeiler"的状态
- 其他作用域的正常功能不受影响
怎么恢复正常
方法一:在 HyperCeiler App 内恢复
打开 HyperCeiler App,进入设置页面,找到「安全模式」相关的恢复按钮,按提示操作。恢复后 HyperCeiler 会重新评估每个功能的崩溃风险,自动把安全模式标记移除。
方法二:手动排查
如果方法一恢复后还是反复触发安全模式,说明某个功能本身有问题:
- 记下安全模式禁用的是哪个作用域
- 进 HyperCeiler App,把那个作用域里最近改过的功能开关逐个关闭
- 重启作用域,看还崩不崩
- 一个个重新打开,定位到具体哪个功能导致崩溃
方法三:LSPosed 侧兜底
如果 HyperCeiler App 都打不开(极端情况下),可以直接进 LSPosed 把 HyperCeiler 模块临时禁用,重启设备——此时系统恢复原生状态,不会再崩溃。之后再仔细排查。
主动安全模式 vs 系统安全模式
HyperCeiler 的主动安全模式和 Android 原生的安全模式(开机时按音量下键进入)是两回事:
| 对比 | HyperCeiler 主动安全模式 | Android 原生安全模式 |
|---|---|---|
| 触发方式 | 模块监控到崩溃频率过高自动降级 | 用户手动触发或系统启动失败后自动进入 |
| 效果 | 只禁用 HyperCeiler 有问题的 Hook,其他功能正常 | 第三方应用全部禁用,只剩系统核心应用 |
| 恢复 | 在 HyperCeiler App 内一键恢复 | 普通重启即可退出 |