Android 6.0向后兼容性

Android 6.0向后兼容性,android,android-6.0-marshmallow,android-permissions,backwards-compatibility,forward-compatibility,Android,Android 6.0 Marshmallow,Android Permissions,Backwards Compatibility,Forward Compatibility,今天我在安卓M(6.0)上测试我的一个应用程序。我知道此版本中的权限授予已更改,我需要进行一些更改以使我的应用程序与Android 6.0()兼容 据我所知,例如,如果我想授予写入SD卡(永久存储)的权限,这是一种危险的权限,我必须请求用户授予访问权限,然后处理用户决策(授予/拒绝),否则我的请求总是会被拒绝 我不知道我是对还是错,但我想知道它是否以某种方式反对向后兼容?我的意思是,每一个在旧版本中运行的应用程序,都需要进行更改才能在6.0版本中运行?如果不再支持特殊应用程序,那么android

今天我在安卓M(6.0)上测试我的一个应用程序。我知道此版本中的权限授予已更改,我需要进行一些更改以使我的应用程序与Android 6.0()兼容

据我所知,例如,如果我想授予写入SD卡(永久存储)的权限,这是一种危险的权限,我必须请求用户授予访问权限,然后处理用户决策(授予/拒绝),否则我的请求总是会被拒绝

我不知道我是对还是错,但我想知道它是否以某种方式反对向后兼容?我的意思是,每一个在旧版本中运行的应用程序,都需要进行更改才能在6.0版本中运行?如果不再支持特殊应用程序,那么android 6.0是我们应该告别它的地方吗


在这种新的环境下,我需要更改我的旧应用程序,使它们在棉花糖中运行(如果它们需要危险的权限)?

向后兼容似乎得到了维护。从

  • 如果设备运行的是Android 5.1或更低版本,您的应用程序的目标SDK为22或更低版本:如果您在清单中列出了危险权限,则用户在安装应用程序时必须授予该权限;如果他们不授予该权限,则系统根本不会安装该应用程序
  • 如果设备运行的是Android 6.0或更高版本,您的应用程序的目标SDK为23或更高版本:应用程序必须在清单中列出权限,并且必须在应用程序运行时请求所需的每个危险权限。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用程序也可以在有限的功能下继续运行
因此,针对SDK 22或更低版本的旧应用程序将看到在安装时授予的权限的旧行为。只有针对SDK 23或更高版本的新应用程序才会立即对此感到担忧

该页面确实列出了您应该注意的一个警告:

注意:从Android 6.0(API级别23)开始,用户可以随时撤销任何应用程序的权限,即使该应用程序的API级别较低。您应该测试您的应用程序,以验证它在缺少所需权限时是否正常运行,而不管您的应用程序目标的API级别如何

这对你的应用程序,甚至是传统应用程序来说,意味着它们需要能够在失去你通常期望它们拥有的特权后生存下来。进行相应的测试和更新


这对于您安装的任何第三方遗留应用来说意味着,在撤销其权限时必须谨慎,因为假定其特权操作将成功的应用在这些权限意外撤销时可能会出现问题。显然,第三方开发人员应该对此进行测试和工作,但这可能并不总是发生。

来自Android文档:

在所有版本的Android上,你的应用程序都需要声明两个正常版本 以及它在应用程序清单中需要的危险权限,如 如声明权限中所述。但是,其效果如何? 声明因系统版本和用户的不同而不同 应用程序的目标SDK级别:

  • 如果设备运行的是Android 5.1或更低版本,或者您的应用程序的目标 SDK为22或更低:如果您在 清单,用户在安装时必须授予权限 应用程序;如果他们不授予权限,则系统不会安装 这个应用程序根本不存在
  • 如果设备运行的是Android 6.0或更高版本,以及 您的应用程序的目标SDK为23或更高:应用程序必须列出 清单中的权限,并且它必须请求每个 应用程序运行时所需的权限。用户可以授予或 拒绝每个权限,应用程序可以继续以有限的权限运行 即使用户拒绝权限请求,也能提供功能
如果你想在Android 6.0中运行你的应用程序,那么你必须在运行时编写请求权限的逻辑。

但它不会改变您的应用程序在旧版本中的行为,这些情况下将在安装时请求权限。

正如我所检查的,我可以在应用程序设置中手动向应用程序授予所有危险权限。里面显示了清单中列出的所有危险权限,我可以授予永久访问权限。