托管设备管理员模式 DPM 无需每次 ADB 的另一条路
什么是托管设备管理员模式
Android 提供了一种"设备管理员"机制——被设为 profile owner 或 device owner 的应用享有一些特权。托管设备管理员模式(Delegated Device Admin,简称 DPM)就是让 App Ops 成为这种特权应用,从系统 API 层面获得 appops 操作能力。
与 Shizuku 模式的核心差异
| 对比项 | Shizuku 模式 | 托管设备管理员模式 |
|---|---|---|
| 激活方式 | ADB 启动 Shizuku 服务(每次重启需重激活) | 一次性设置 profile owner,长期有效 |
| 持续性 | 重启失效需重激活 | 重启后仍然生效 |
| appops 能力 | 完整 | 完整 |
| runtime permission | 可设置(需额外依赖 Island 等) | 仅可设置(也需 Island 5.0+ 或 Delegated Scopes Manager) |
| permission flags | 可读取可设置 | ❌ 无法设置 |
| Android 11"每次都询问" | ✅ 支持 | ❌ 因无法设置 permission flags 而支持不了 |
| 多用户 | ✅ 完整支持 | ✅ 支持 |
| 额外依赖 | Shizuku 应用 | Island v5.0+ 或其他 DPM 管理员应用 |
适合什么人
- 嫌每次重启都要重激活 Shizuku 太麻烦的人:DPM 模式一次设置长期有效,不用管重启
- 已使用 Island 的人:Island 本身就是一个 DPM 管理员应用,顺便把 App Ops 加进去很方便
- 不需要 permission flags 相关功能的人:Android 11 以下系统功能完整
不适合什么人
- 追求完整功能的人:Shizuku 模式能力更全
- Android 11+ 需要"每次都询问"的人:DPM 模式因无法设置 permission flags 而不支持这个功能
设置步骤概要
设置 DPM 模式需要:
- 先安装一个支持 Delegated Scopes Manager 的管理员应用(如 Island v5.0+)
- 在 App Ops 设置里选择"托管设备管理员模式"
- 系统弹出设备管理员授权对话框,勾选"修改 app ops"后确认
- ADB 执行额外命令授予"获取 app ops"权限:
adb shell pm grant --user 0 rikka.appops android.permission.GET_APP_OPS_STATS
- 完成,之后就不需要再跑 ADB 命令了
局限性总结
DPM 模式无法解决以下问题:
- 无法正确确认 appops 设置是否真的生效(因为无法同时检查 runtime permission 和 permission flags 的完整状态)
- Android 11 新增的"每次都询问"权限状态无法设置
- 无法备份全部 appops 设置(备份功能不完整)
这些局限性的根源是 Android 系统对设备管理员权限的 API 暴露不完整,不是 App Ops 的 bug。
两种模式怎么选
详见 两种工作模式对比与选择。