存储权限 App Ops 能帮你做什么
Android 存储权限的版本混乱
存储权限是 Android 上变化最频繁的权限之一,不同系统版本的行为完全不同:
- Android 10 以前:
READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE基本上等价 - Android 10:引入 Scoped Storage,普通应用只能访问自己专属的媒体目录,需要特殊权限
MANAGE_EXTERNAL_STORAGE才能全盘访问 - Android 11+:Scoped Storage 进一步收紧,
MANAGE_EXTERNAL_STORAGE变成系统级开关
App Ops 的存储权限 appops 操作的是应用"读写外部存储"的 appops 设置,跟系统存储权限面板是两层独立的东西。
App Ops 对存储权限的控制
在 App Ops 应用详情页,存储相关的权限项可能包括:
WRITE_EXTERNAL_STORAGE/READ_EXTERNAL_STORAGE:传统存储读写MANAGE_EXTERNAL_STORAGE:全盘访问(Android 11+)MANAGE_MEDIA:媒体文件管理(Android 13+)
对这些 appops 可以用四种状态分别控制:
- 忽略:让应用"以为"获得了存储权限,但实际读写返回空或失败
- 仅在使用期间允许:前台可用存储,后台被限制
与 Storage Isolation 的配合
Storage Isolation 是同 Rikka Apps 开发的另一个工具,让每个应用只能访问自己专属的隔离存储目录。App Ops 和 Storage Isolation 可以组合使用:
- App Ops 控制权限层面:通过 appops 设置决定应用能否访问存储
- Storage Isolation 控制物理层面:即使应用有权限,也只能看到自己的隔离目录
Storage Isolation 需要 Root 权限,App Ops 不需要。无 Root 设备用 App Ops 的忽略模式也能在一定程度上阻断应用对存储的访问。
实用场景
场景一:阻止应用偷偷访问 DCIM/下载目录
某些应用安装后会扫描 DCIM、Download 等公共目录,读取其中的文件列表甚至读取文件内容。在 App Ops 里把这些应用的存储权限设为忽略,它们"以为"有存储权限,实际读写返回空。
场景二:控制文件管理器
文件管理器通常需要全盘访问权限。对于不常用的文件管理器,可以设为"仅在使用期间允许"——只有当你主动打开它的时候才给它权限。
场景三:Scoped Storage 绕过
部分应用在 Android 10+ 上通过申请 MANAGE_EXTERNAL_STORAGE 绕过 Scoped Storage。在 App Ops 里把这个 appops 设为忽略可以在不撤销系统权限的情况下阻止实际的全盘访问。
注意事项
- 存储权限设为忽略可能导致应用无法保存文件、无法加载图片等功能异常,根据实际情况决定
- Android 13+ 新增的 READ_MEDIA_IMAGES / READ_MEDIA_AUDIO / READ_MEDIA_VIDEO 是新的运行时权限,App Ops 对它们也有对应的 appops 项
- 系统自带的文件管理器和云盘应用(Google Files、OneDrive 等)的存储权限需要谨慎修改
组合策略建议
| 应用类型 | 推荐设置 |
|---|---|
| 拍照/录像 App | 允许(需要写 DCIM) |
| 下载器 | 允许(需要写 Download) |
| 文件管理器 | 允许 或 仅在使用期间允许 |
| 社交/娱乐 App | 忽略存储权限(不让它们碰公共目录) |
| 游戏 | 忽略 或 允许(取决于是否需要存档) |