微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 11: avc: denied { read } for name="sdcard"

如何解决Android 11: avc: denied { read } for name="sdcard"

升级到 Android 11 后,无法再访问 /sdcard/Android/data/<packageId>/files 下的应用文件。我收到以下错误

type=1400 audit(0.0:672): avc: denied { read } for name="sdcard" dev="tmpfs" ino=6474 scontext=u:r:untrusted_app_29:s0:c244,c256,c512,c768 tcontext=u:object_r:mnt_sdcard_file:s0 tclass=lnk_file permissive=0 app=com.example.myapp

即使我在清单中请求 MANAGE_EXTERNAL_STORAGE 并将其授予应用程序后,此行为仍然存在。

我了解,即使具有最大存储权限,Android 11 restricts access 仍会转到某些路径,包括 /sdcard/Android/data但是,我尝试访问的目录是应用程序自己的数据目录。

如何在使用 File 等而非 SAF 时访问此路径?

解决方法

对该问题的进一步检查显示,该应用试图通过 /mnt/sdcard/Android/data/<packageId>/files 访问自己的数据目录。虽然(在我的设备上)/mnt/sdcard/sdcard 都是指向同一个目标的符号链接,但显然它们不是平等的。

删除路径设置,导致应用回退到 API 报告的数据目录,为我解决了问题。

我进行了更多测试,发现以下内容:

  • API 报告的路径:有效
  • /sdcard/Android/data/<packageId>/files:作品
  • /mnt/sdcard/Android/data/<packageId>/files:不起作用
  • /storage/emulated/0/Android/data/<packageId>/files(用它的符号链接目标替换 /sdcard):有效

还值得注意的是,文档特别提到了 /sdcard

结论:应用对其外部私有存储区域的访问取决于所使用的路径。对同一路径的不同处理方式可能会产生不同的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。