发现一个问题, Android6.0 以后加入了权限动态申请的机制,但是为什么在《茄子快传》这个应用中看不到任何关于向用户申请权限的提示,并且本地存储的读写权限也都是默认授予的,不太清楚这是如何操作的?

2018-12-03 00:17:21 +08:00
 merpyzf
5516 次点击
所在节点    Android
6 条回复
Android2MCU
2018-12-03 00:26:09 +08:00
target sdk 低于 6.0 版本,权限都是安装时授予,无需再动态申请。我自己给系统写 demo app 的时候常这么干
CEBBCAT
2018-12-03 01:12:12 +08:00
一楼结贴
merpyzf
2018-12-03 08:57:00 +08:00
@Android2MCU 好的👌,谢谢你了
crayygy
2018-12-03 09:49:22 +08:00
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
merpyzf
2018-12-03 12:49:07 +08:00
@merpyzf 谢谢你的回答,反思下自己,很多时候对于技术就只停留在会用就行了,却没有深挖其中隐含的细节。受教了!
lisjiang
2018-12-06 12:11:01 +08:00
我也来补充一下,现在如果新应用上架 googleplay,targetSDK 必须大于等于 26,也就是说,权限适配必须做。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/513659

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX