1L 说的很清楚了,我再补充一点额外的好了。
所谓的 Android 6.0 加入了动态权限申请机制,需要达成两个条件。
1. 机器的 Android OS version >= 6.0
2. Application 的 targetSdk >= 23 (也就是 Android 6.0 的 SDK version)
在 Android 6.0 发布的时候,为了避免出现应用不能向上兼容的情况,所有 targetSdk < 23 的应用还可以继续下载安装,但是在 Google Play 上,下载之前会有一个 popup 告诉你,这个应用都申请了哪些权限。 你可以在系统设置里面关掉这个 App 对应的权限,但是不保证能够正常工作(因为 App 可能没有 check 没有权限的情况)。
而当应用 targetSdk >= 23 以后,在编写代码的时候必须实现动态权限申请,否则根本没办法使用权限。而很多应用为了逃开这个限制,选择了继续 targetSdk 到 22。但是编译的 SDK version 提升。比如我曾经见过的 网易云音乐,targetSdk 22,但是却使用了 Android 7.0 的新功能。
为了解决这个问题,Google 从去年开始实施一个规定(针对 Google Play ),到 2018 年 11 月以后,所有的应用要上架、更新,必须 targetSdk 到 Oreo 以上,而从 2019 年开始,上架、更新应用的 targetSdk 版本必须是一年以内发布的版本(这条规则比较绕,我们也看了好几遍)。
详细的信息可以参考这篇官方文章
https://android-developers.googleblog.com/2017/12/improving-app-security-and-performance.html