只针对旧版安卓系统请求权限:maxSdkVersion无效?

10

我希望在保证兼容性的情况下,仅向部分较旧的设备授予权限。因此,我进行了一些研究,并找到了这个链接

android:maxSdkVersion
The highest API level at which this permission should be granted to your app. Setting this attribute is useful if the permission your app requires is no longer needed beginning at a certain API level.

For example, beginning with Android 4.4 (API level 19), it's no longer necessary for your app to request the WRITE_EXTERNAL_STORAGE permission when your app wants to write to its own application-specific directories on external storage (the directories provided by getExternalFilesDir()). However, the permission is required for API level 18 and lower. So you can declare that this permission is needed only up to API level 18 with a declaration such as this:

<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />
我试过实现它,但它并没有起作用。因此,我建立了这个简单的测试:
<uses-permission
    android:name="android.permission.WRITE_SMS"
    android:maxSdkVersion="3" />

据我所知,此权限仅适用于API级别为1-3的设备,但我在API 18设备上申请此权限。 我做错了什么还是这个功能有问题?


2
在清单文件中添加权限。不必担心API级别。如果在较新的版本中不需要该权限,则会被忽略。 - Pankaj Kumar
文档中提供的代码是用于WRITE_EXTERNAL_STORAGE而不是WRITE_SMS - Pankaj Kumar
@PankajKumar 好的,我的代码虽然不使用它,但用户可能认为我会用它来做一些恶意的事情,因此我真的只想使用最少的权限。是的,这只是一个例子,它也适用于其他权限,不是吗? - rekire
是的,那应该可以(如他们所说到文档中)。但不确定它是否适用于所有权限或仅适用于那些不需要添加到较新API的权限。 - Pankaj Kumar
1
参考链接:https://android.googlesource.com/platform/frameworks/base/+/fb0676a902dd1195e3e35790d137bc1b90e390ba。看起来在那个时候Android 4.4还没有被命名为KK :) - ozbek
显示剩余7条评论
2个回答

9
在API级别19中添加了maxSdkVersion属性(应该在文档中提到)。参考。 引入<uses-permission>maxSdkVersion,这样当应用程序在后续版本的操作系统上运行时,可以自动地停用其权限请求,其中这些权限不再相关,但可能会令用户感到惊恐。一个经典的例子是WRITE_EXTERNAL_STORAGE,在KLP之后,如果一个应用程序仅仅为其自己的大数据需求使用外部存储卷,并且不需要多个应用程序之间的实际文件系统共享,则此权限变得不必要。
Bug 9761041
Change-Id:I60130af3a108fe4a750c356038a1c8cb897e9c8b (缺失,可能是Google内部的更改) 看起来,当时Android 4.4还没有被称为KK :)

2
看起来没有指定 minSdkVersion..很奇怪。例如,仅在4.4及以上版本中才需要android.permission.READ_EXTERNAL_STORAGE 来读取文件,例如“打开方式”数据筛选器方案。 - Barry Staes
1
请注意,虽然maxSdkVersion在Android操作系统中运行良好,但Play Store根本不识别它,并且将继续报告所有标记有此标志的权限为新权限! 它还将要求用户确认包含该标志的每个后续更新中的这些“新”权限! 这已于2年前向Google报告,至今没有修复! - 3c71
@3c71,谢谢。你能否发一下那个漏洞报告的链接?也许有人想要点赞/投票来帮助加速修复。 - ozbek
感谢 @3c71。看起来问题 63895 是最适合收藏的。 - ozbek
1
是的,很抱歉没有更新这篇文章。这个问题已经在Play Store 6.0.5中解决,在2016年1月1日或更早的版本中可用。我已经成功地发布了具有此特定标志的应用程序,没有任何进一步的问题! - 3c71
显示剩余3条评论

0

在我的安卓5.0.2的HTC手机上,当拥有权限和限制:android.permission.WRITE_EXTERNAL_STORAGEmaxSdkVersion = 18时,外部存储失败了。因此,我需要将maxSdkVersion更改为22。


我在这个设备和版本上也遇到了这个问题,但不知何故,通过POC访问外部存储并没有失败。这一定是应用程序本身的原因,但我找不到具体是什么。你能否请在你的设备上尝试这个应用程序:https://code.google.com/p/android/issues/detail?id=231869 - android developer
嗨,谢谢你的来信,很抱歉回复晚了。但是我现在没有时间 :-/ - kotlinski
请问您能否考虑给报告的问题点个赞? - android developer
嘿嘿,我可以给它点赞...但我甚至不确定我在点赞什么...没有时间去记住或弄清楚我的主要问题是什么...:-P - kotlinski
关于你发现的问题。我在同一设备上出现了完全相同的问题。 - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接