可以使用Api 23(6.0)进行编译并维护旧的权限系统(安装时)吗?

Nul*_*ion 2 android android-build android-gradle-plugin android-api-levels

我在官方的android博客中引用了这个:

权限更改 使用Marshmallow,权限已从安装时移至运行时.这是SDK 23+的强制性更改,这意味着它将影响所有开发人员和所有针对Android 6.0的应用程序.

所以...如果您使用Android 6.0(api 23)进行编译但是您的目标是Android 4.4(api 20),则可以保留旧的权限系统吗?

我的意思是这样做:

    compileSdkVersion 'Google Inc.:Google APIs:23'
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 20
    }
Run Code Online (Sandbox Code Playgroud)

我现在的项目的必要条件是维护旧的权限系统并定位sdk版本20(因为我需要维护旧的通知系统,如果你的目标sdk版本高于20,你必须使用新的通知系统).所以...如果我的目标是sdk版本20,我可以使用Api 23进行编译并维护旧的权限系统吗?

谢谢

cam*_*der 7

是的,如果targetSdkVersion设置<23,将使用旧的权限系统(即使在Android 6.0上).但是,Android 6.0上的用户以后可以手动禁用"设置"中的各个权限.虽然Android 6.0会在用户尝试这样做时发出警告,但无论如何都可以撤消.

现在问题是用户撤销权限后您的应用会崩溃吗?

当我们调用一个需要在targetSdkVersion少于23的应用程序上撤销权限用户的函数时,不会抛出异常.相反,它只是什么都不做.对于返回值的函数,它将返回null或0,具体取决于具体情况.虽然应用程序不会因调用函数而崩溃.它可能仍然可以从该应用程序下次返回的值中崩溃.

  • 对于我们的项目来说,这是一个非常重要的信息,我们运行的应用程序不是手机,而是基于运行Android 6的基于Qualcomm Snapdragon芯片组的主板.我们无法设置权限,因为没有显示,它是无头的设置.我刚刚将targetSDK更改为22,现在应用程序不会要求权限.非常感谢您的回答.电路板制造商应该从他们的Android图像中完全禁用权限模块,我相信他们最终必须这样做,否则这些没有显示器的电路板将来不会很实用. (2认同)