禁止requestLegacyExternalStorage

网友投稿 991 2022-05-29

RequestLegacyExternalStorage

在Android使用fuse文件系统开始,Android针对外置存储支持了独立的沙箱存储空间, 一般通过Context.getExternalFilesDir() Api获取,该空间内的数据为应用独有,并且不需要申请任何权限即可使用。但是当时并没有限制应用读写非沙箱内的数据。但是从Android Q开始,出于数据隐私问题,Android 希望禁止应用程序操作非沙箱内的数据。 但是为了过度,Android提供了requestLegacyExternalStorage机制,来帮助应用使用原来的机制继续读写存储卡。 关于Android 存储机制的说明请参考Android官方文档 存储。 新版本的适配可以参考Android Q分区存储权限变更及适配这篇文章。本文意在说明Android 系统如何实现requestLegacyExternalStorage机制,所以这里简单说明下,在Android Q上,是不希望应用继续访问非沙盒路径的,沙盒路径一般为外置存储下的/storage/emulated/${userid}/Android/${dir}/${package}/, 这里通过包名来划分路径,应用可以不需要权限直接访问沙盒路径下的数据。非沙盒路径为外置存储下的其他路径,不允许访问。 为了过度,Android提供了以下策略:

Android应用程序即使获取了读写存储卡权限也不能读写非沙盒路径下的数据。除非

Android应用程序获得读写存储卡权限的情况下,必须在AndroidManifest.xml的application标签下声明requestLegacyExternalStorage=true,才可以访问沙盒路径下的数据。

targetSdkVersion<29 的应用程序默认带有requestLegacyExternalStorage=true属性。

看到这requestLegacyExternalStorage也就是个临时工,现在临时工要下岗了。

预览:使用所有文件访问权限(MANAGE_EXTERNAL_STORAGE)

预览文章 (2021年5月5日生效)

本文预览了我们在2021年3月发布的政策更新中包含的更改 。

禁止requestLegacyExternalStorage

更新的文章包含有关“所有文件访问”(MANAGE_EXTERNAL_STORAGE)权限的可接受使用的信息。这些政策更改将于2021年5月5日生效。

要查看当前的“使用所有文件访问权限(MANAGE_EXTERNAL_STORAGE)”文章,请访问此页面。

出于与COVID-19相关的考虑,面向Android 11(API级别30)并要求“所有文件”访问权限的应用只能在2021年5月之前上传到Google Play。这包括新应用以及对现有应用的更新。此临时上传限制仅影响以Android 11(API级别30)为目标并请求所有文件访问权限的应用。

目前,如果您认为您的应用需要“所有文件”访问权限,建议您此时不要将目标SDK级别更新为Android 11(API级别30)。如果您以Android 10为目标,请考虑使用 requestLegacyExternalStorage标志。

Google Play限制使用高风险或敏感权限,包括特殊的应用访问权限,称为“ 所有文件访问”。这仅适用于以Android 11(API级别30)为目标并声明MANAGE_EXTERNAL_STORAGE权限的应用程序,该应用程序已在Android 11中添加。此外,此策略不会影响READ_EXTERNAL_STORAGE权限的使用。

如果您的应用不需要访问MANAGE_EXTERNAL_STORAGE 权限,则必须将其从应用清单中删除才能成功发布应用。以下还详细介绍了符合政策的替代实现。

如果您的应用符合可接受使用的政策要求或有资格获得例外,则将需要您 使用Play控制台中的“声明表”声明此权限以及任何其他高风险权限。

不符合政策要求或未提交声明表的应用可能会从Google Play中删除。

您什么时候应该请求“所有文件”访问权限?

仅当您的应用无法有效利用更加隐私友好的最佳做法(例如使用Storage Access Framework或Media Store API)时,才应访问所有文件访问权限。

此外,应用程序对权限的使用必须在允许的使用范围内,并且必须直接与应用程序的核心功能联系在一起。核心功能被定义为应用程序的主要目的。没有此核心功能,该应用程序将“损坏”或无法使用。核心功能以及组成该核心功能的任何核心功能都必须在应用程序的描述中突出显示并进行宣传。

所有文件访问权限的允许使用

对于请求访问所有文件访问权限的应用程序,预期用途和允许使用包括;文件管理器,备份和还原应用程序,防病毒应用程序以及文档管理应用程序。

被授予访问权限的应用程序可能无法将其使用扩展到未公开或无效的目的。

合格许可*

文件管理

应用程序的核心用途涉及在其特定于应用程序的存储空间之外的文件和文件夹的访问,编辑和管理(包括维护)

MANAGE_EXTERNAL_STORAGE

备份和还原应用

应用程序必须需要自动访问其特定于应用程序的存储空间之外的多个目录,以进行备份和还原

防病毒应用

应用程序的核心目的是扫描设备并向设备用户提供防病毒安全功能

文件管理应用程式

必须在其特定于应用程序或共享存储的外部查找,访问和编辑兼容文件类型的应用程序

搜索(在设备上)

应用程序的核心目的是搜索设备外部存储中的文件和文件夹

磁盘/文件夹加密和锁定

应用程序的核心目的是加密文件和文件夹

设备迁移/电话转移

App的核心目的是帮助用户迁移到新设备

*须经Google Play审核和批准。

例外情况

在以下情况下,Google Play可能会为不符合上述指定允许使用条件的应用提供临时例外:

使用权限可以启用应用的核心功能;和

当前没有其他方法可以提供核心功能。或者

使用隐私友好的替代方案(例如MediaStore API或Storage Access Framework)会对与核心功能相关的应用程序关键功能产生重大不利影响。

安全性和隐私最佳做法可减轻对用户隐私的影响

开发人员必须在控制台声明中说明为什么Storage Access Framework或MediaStore API不足以满足其应用程序的目的。

注意:除了需要访问的关键服务之外,用于运营商和OEM服务的应用以及在托管Google Play分发平台下发布的私人应用可能还会要求上述使用情况的权限访问。

无效的使用

在某些情况下,应用可能希望出于存在更安全,更安全的替代选择或数据暴露的风险不能保证访问的目的访问敏感的用户数据。

下面是不会被允许请求的常见使用情况列表MANAGE_EXTERNAL_STORAGE的权限

媒体文件访问(请参阅下面的替代方法)

用户手动选择单个文件的任何文件选择活动(请参见下面的替代方法)

注意:此列表并不详尽。有关深入指导,请参阅开发人员的“所有文件访问”文档和“范围存储”最佳实践指南。

通用替代品

备择方案

媒体文件的访问

借助MediaStore API,应用程序可以贡献和访问外部存储卷上可用的媒体,而无需访问所有文件的权限。

开发人员应考虑使用Storage Access Framework作为 隐私友好选项, 以访问共享存储中的文件,例如使用Storage Access Framework。

重要提示:如果您更改了应用程序使用这些受限权限的方式,则必须再次提交包含更新且准确的信息的表单。对这些权限的欺骗性和非声明性使用可能会导致您的应用程序暂停和/或终止您的开发人员帐户。

*现阶段requestLegacyExternalStorage可以在Android11正常使用,不会造成崩溃,如果你的应用需要在Google Play发布,那么恭喜你可以调整你的代码了,删除requestLegacyExternalStorage才可以呦。

当然不需要发布的话就不收影响。

于 2021 年 5 月 5 日生效的Google Play 政策更新只针对 API 级别 30 或更高版本为目标平台且使用 MANAGE_EXTERNAL_STORAGE 权限(所有文件访问)的应用。如果你的应用不使用或无计划使用此权限,则此政策更新不适用于你。如果你的应用目前使用的 API 级别是 29 或更低,不需要遵守此政策,当你需要更新你的应用至 API 级别 30(Android 11)或更高版本为目标平台时,则需遵守此政策。或者,当你更新应用至 API 级别 30(Android 11)时,你也可以不使用此权限。

Android10-11文件存储

Android API

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:重学计算机组成原理(4)-还记得纸带编程吗?
下一篇:了解python
相关文章