App Ops 多用户和工作资料夹权限隔离
Android 多用户架构
Android 从 4.2 起支持多用户(多个用户账号共用一台设备),包括:
- 主用户(Primary User):设备所有者
- 工作资料夹(Work Profile):企业或个人用沙箱环境,独立的应用和数据
- 子账号(Secondary User):其他家庭成员或临时用户
- 分身/双开应用:某些厂商提供的应用双开功能
每个用户有独立的 Linux uid 范围,这意味着:
- 应用在不同用户下是独立安装的
- 每个用户的设置、数据、appops 权限各自独立
- 主用户的 App Ops 设置不会影响工作资料夹里的同一个应用
App Ops 如何支持多用户
Shizuku 模式
Shizuku 模式完整支持多用户:
- Shizuku 服务运行在主用户(或 root)
- App Ops 通过 Shizuku 获得跨用户读取和设置 appops 的能力
- 可以查看和修改所有用户的 appops 设置
在 App Ops 应用列表中,不同用户的应用会被标注所属用户,或可以按用户分组查看。
托管设备管理员模式(DPM)
DPM 模式也支持多用户,但取决于底层 DPM 管理员应用的实现:
- Island v5.0+ 支持多用户 Delegated Scopes Manager
- 其他 DPM 应用支持情况可能不同
多用户场景下的 appops 独立性
这是一个关键理解点:
| 场景 | appops 是否共享 | 说明 |
|---|---|---|
| 主用户和工作资料夹里的"同一个应用" | 不共享 | 工作资料夹里的应用有独立的 uid,appops 独立 |
| 主用户和子账号里的"同一个应用" | 不共享 | 同理,独立 uid = 独立 appops |
| 主用户里 App Ops 的设置 | 只影响主用户 | 工作资料夹里的应用不受影响 |
这意味着你可以在主用户里把微信的定位权限设为忽略,但工作资料夹里的微信分身定位权限可以设为允许——两套独立设置互不干扰。
Shizuku 模式下的跨用户操作
使用 Shizuku 模式时,App Ops 可以跨用户操作:
- App Ops 应用列表里显示所有用户的已安装应用
- 点击工作资料夹里的某应用,进入它的 appops 详情
- 修改的是该用户下的 appops,不影响其他用户
多用户下的 ADB 激活
如果使用 ADB 激活 Shizuku:
- ADB shell 默认在主用户(user 0)运行
- Shizuku 服务通常也在主用户启动
- 但 Shizuku 的能力可以跨用户调用,App Ops 不受限制
这和 Shizuku 的 Binder 服务架构有关——它作为系统级服务,能被任意用户的 App Ops 调用。
多用户场景下的常见问题
问题:主用户改了权限,工作资料夹里没变化
正确。不同用户的 appops 独立,需要分别进入各用户的 App Ops 实例修改。
问题:工作资料夹里没装 App Ops
工作资料夹里的应用权限需要:
- 要么在主用户的 App Ops 里通过 Shizuku 跨用户修改(需要 App Ops 在主用户能看到工作资料夹的应用)
- 要么在工作资料夹里也装一个 App Ops,独立管理(更直观)
问题:重置手机时工作资料夹的设置丢失
工作资料夹的 appops 设置保存在 Android 系统数据库中(带 user 标识)。刷机或恢复出厂设置会清除所有用户的数据和 appops。用 App Ops 备份时注意:备份文件格式支持跨用户保存。
使用建议
- 个人设备 + 工作资料夹:主用户 App Ops 管个人应用,工作资料夹 App Ops 管工作应用——两套独立配置更清晰
- 家庭共享设备:主用户配置好后,给子账号分别安装 App Ops 独立管理各自应用
- 双开应用:主应用和分身应用的 appops 完全独立,可以一个忽略定位一个允许