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
。
结论:App访问其外部私有存储区取决于使用的路径。处理相同路径的不同方法可能会产生不同的结果。
升级到 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
。
结论:App访问其外部私有存储区取决于使用的路径。处理相同路径的不同方法可能会产生不同的结果。