Android 11(API30)获全文件权限后无法访问/Android/data第三方目录如何解决
Android 11 访问/Android/data目录问题解答
错误原因
Android 11(API 30)强制启用分区存储沙箱隔离规则,即便你已经获取了MANAGE_EXTERNAL_STORAGE所有文件访问权限,系统仍然默认禁止第三方应用直接读写其他应用的/Android/data、/Android/obb私有目录,这是系统层面的安全限制,和你当前的权限申请逻辑无关,这也是你报错EACCES (Permission denied)的核心原因。
解决方案
根据使用场景选择对应方案即可:
- 访问自有应用的
/Android/data目录
不要硬编码完整存储路径,直接调用系统API获取你的应用专属私有目录,无需额外权限即可直接读写,示例代码:// 返回值对应路径为 /storage/emulated/0/Android/data/你的应用包名/files File appPrivateExternalDir = getExternalFilesDir(null); - 访问第三方应用的
/Android/data目录
公开发布的普通应用唯一合法方案是使用存储访问框架(SAF):- 发起SAF目录选择Intent,引导用户手动导航到
/Android/data下的目标第三方应用目录,手动确认授权 - 授权成功后拿到目标目录的Uri,后续通过
DocumentFile类即可对该目录下的文件进行读写操作
如果你开发的是面向Root设备的专属工具,也可以申请Root权限后直接读写对应路径,该方案不适合上架应用商店的普通应用。
- 发起SAF目录选择Intent,引导用户手动导航到
注意:通过反射、调用隐藏API绕过限制的方案已经在Android 11的后续系统补丁中被全面封堵,无法稳定使用,不建议采用。
内容的提问来源于stack exchange,提问作者fire borrower
相关产品推荐
相关产品推荐

