App Ops 改好的权限自己又变回去了怎么办
问题描述
在 App Ops 里给某应用设了"定位忽略",过了几天重新打开 App Ops 一看——定位又变回"允许"了,好像你从来没改过一样。
这不是 App Ops 的 bug,也不是你的操作没成功,而是 Android 11 引入的 appops 自动重置机制在起作用。
为什么会自动重置
Android 11 开始,系统在检测到以下条件时会主动把应用的 appops 设置重置为"与运行时权限一致"的状态:
| 触发条件 | 说明 |
|---|---|
| 应用安装后 | 新安装应用的 appops 初始状态由系统决定 |
| 运行时权限被修改 | 你在系统设置里改了运行时权限,系统可能同时重设 appops |
| permission flags 没有 FIXED 标志 | 系统重置时会跳过有 FIXED 标志的 appops |
| 系统认为 appops 与运行时权限不一致 | "运行时权限 allow + appops ignore"被视为不一致 |
| 厂商定制 ROM 的额外重置 | MIUI、ColorOS 等在清理/更新时可能触发重置 |
App Ops v5.0.0 怎么缓解
v5.0.0 重写后,Shizuku 模式在设置 appops 的同时会:
- 读取和设置 permission flags
- 在"运行时权限 allow + appops ignore"时自动设置 FIXED 标志
- 让系统认为"这组设置是用户有意锁定的"
这样系统重置时会跳过这个 appops,不再自动改回去。
为什么还是可能被重置
App Ops 做了努力但无法 100% 阻止:
- 应用安装后的初始重置:发生在 App Ops 介入之前,App Ops 没法提前设置 FIXED 标志
- 某些厂商 ROM:可能绕过 permission flags 直接重置 appops
- 系统更新:大版本更新时系统可能重新初始化 appops 数据库
- DPM 模式:无法设置 permission flags,完全无法缓解这个问题
解决方案
方案一:选 Shizuku 模式(优先)
Shizuku 模式(无论是 ADB 激活还是 Root 激活)是唯一能设置 permission flags 的工作模式。选择它是对抗自动重置的第一步。
方案二:定期复查并恢复
- 定期检查已修改权限列表:App Ops 会高亮显示你改过的应用
- 发现被重置立即重设:系统重置主要在安装/更新/权限修改时发生,平时稳定
方案三:用备份快速恢复
- PRO 版自动增强备份:权限变更自动保存,被重置后能快速恢复
- 手动导出 JSON 备份:定期备份,发现批量重置时一键恢复
方案四:改用系统面板策略
如果某权限被系统反复重置,考虑:
- 在系统权限面板里拒绝那个权限(系统拒绝的 uid mode 有优先级)
- 让 App Ops 维持与系统一致的设置
- 这种组合更稳定但缺少了"忽略"模式的好处
哪些应用最容易被重置
- 新安装的应用:安装时系统会初始化 appops,App Ops 来不及提前设 FIXED
- 频繁更新的应用:每次更新可能触发系统的 appops 重新评估
- 权限被手动改过的应用:在系统设置里改过运行时权限后,系统可能重设 appops
总结
权限自动恢复不是 App Ops 的 bug,是 Android 11+ 的系统设计。App Ops v5.0.0 通过 permission flags FIXED 标志尽量缓解但无法彻底阻止。实用策略是:Shizuku 模式 + 定期检查 + 备份恢复。