为什么增加了READ_PHONE_STATE权限?

42

我刚刚发布到Play Store上的最新测试版中,我注意到与之前版本相比增加了READ_PHONE_STATE权限。

我自己并没有添加这个权限。在上一个版本之后,我能回忆起来做的唯一更改就是使用各种play-services库的v9.6.0版本(之前是v9.4.0):

compile 'com.google.android.gms:play-services-location:9.6.0'
compile 'com.google.android.gms:play-services-places:9.6.0'
compile 'com.google.android.gms:play-services-auth:9.6.0'

这样做可以吗?我没有找到文件记录。我能否摆脱权限?

根据这个答案,我确保我使用的所有库与主应用程序匹配......但在我的情况下没有任何区别。

编辑

好的,根据这篇文章,我已经深入研究了日志输出,发现:

ADDED from [Meteogram:jobdispatcher:unspecified] C:\Users\Me\AndroidStudioProjects\Meteogram\app\build\intermediates\exploded-aar\Meteogram\jobdispatcher\unspecified\AndroidManifest.xml:37:25-84 android:uses-permission#android.permission.READ_PHONE_STATE

自上一版本以来,我将作业调度程序库(作为gradle模块导入到我的项目中)中没有更改任何内容。

编辑2

这是日志中的更多信息,我感觉可能是由于play-services库版本的原因?

ADDED from [Meteogram:jobdispatcher:unspecified] C:\Users\Me\AndroidStudioProjects\Meteogram\app\build\intermediates\exploded-aar\Meteogram\jobdispatcher\unspecified\AndroidManifest.xml:37:17-87
    android:name
        ADDED from [Meteogram:jobdispatcher:unspecified] C:\Users\Me\AndroidStudioProjects\Meteogram\app\build\intermediates\exploded-aar\Meteogram\jobdispatcher\unspecified\AndroidManifest.xml:37:25-84
android:uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from C:\Users\Me\AndroidStudioProjects\Meteogram\app\src\pro\AndroidManifest.xml:2:1-12:12 reason: com.google.android.gmscore.integ.client.location has a targetSdkVersion < 4
activity#com.google.android.gms.common.api.GoogleApiActivity

targetSdkVersion < 4与上面链接的另一个答案相匹配,但是在play-services库不属于我自己的情况下,我能做些什么呢?

编辑3

我找到了一个答案...与其删除这个问题,我会保留它,并提供解决方案,以防对他人有用(以及以防有人有更好的解决方案!)

编辑4

看起来已经在9.6.1中修复了。

6个回答

33

我最终找到了这个,它报告了相同的问题。 答案#3提到了一个解决方法,即要“手动”删除权限(我的假设是该权限仅适用于非常早期的Android版本,对我来说没问题,因为我的minSdk是16):

<manifest ...
    xmlns:tools="http://schemas.android.com/tools"
    ... >

<uses-permission
    android:name="android.permission.READ_PHONE_STATE"
    tools:node="remove" />

问题是,它是否破坏了Google服务的功能?你遇到过任何问题吗? - vanomart
3
早期的Android版本甚至不需要权限。实际上,在早期的Android版本中根本不存在这个权限,而现在需要该权限的功能根本不需要任何权限。如果Android Studio认为您的代码不知道该权限,则会添加该权限。 - j__m
这应该被视为一种解决方法,直到修复程序发布。事实上,与Mikkel Jørgensen所提到的问题相关的进展并没有任何进展。 - Filipe Bezerra de Sousa
我在下面添加了一些细节,以便为像我这样缺乏经验的Android开发者提供解决方法。谢谢drmrbrewer。 - xaphod
即使添加了 tools:node="remove",如果我运行 cordova build android 命令,它仍然会将权限 READ_PHONE_STATE 添加到 android manifest.xml 文件中。有没有办法从清单文件中删除权限 READ_PHONE_STATE? - Sachin HR

22

这个问题也存在于 Play Services v12.0.0 中。有一个 问题跟踪器。看起来这个问题对以下两个权限都存在:

  • android.permission.READ_PHONE_STATE
  • android.permission.WRITE_EXTERNAL_STORAGE

很可能会在12.0.1中修复此问题,就像我们从最初的问题中看到的那样。

在此之前,我建议按照drmrbrewer的答案中所述,手动从清单中删除该权限。

更新:
已经发布了12.0.1版本,日期为2018年3月28日,其中解决了这个问题。 请查看此处的发行说明

将缺失的minSdkVersion添加到许可证构件中,以防止自动包含READ_PHONE_STATE和READ_EXTERNAL_STORAGE权限。


2
不错的解决方案,但如果您使用Crashlytics + Firebase v12.0.0 +手动删除权限的组合,它会崩溃。似乎安全的做法是继续使用v11.8.0。我认为问题出在模块“com.google.android.gms:play-services-maps:12.0.0”上。 - Pelanes
我同意 - 我也会一直保留11.8.0版本,直到修复出现。 - Mikkel Jørgensen
请检查我的答案。它刚在12.0.1 Firebase版本中修复。 - Henrique Monte
2
我可以确认12.0.1版本已经解决了这个问题。 - Mikkel Jørgensen

20
更新 #2:版本 10.0.1 再次修复了这个问题。 更新:此帖子报道,Google Play services 版本 10.0.0 中也存在此问题。 之前的答案: 根据Android Developers G+ 社区中的此贴,其中一个管理员(我)发布了以下评论:

昨天开发人员指出了这个问题,我已经在内部报告了该问题,修复已在内部完成,很快会推出更新的 SDK。

现在更新后的 SDK 已经可用 - 使用 9.6.1 的 Google Play services 依赖。

3
@ianhanniballake,在版本12.0.0中是否再次发生了这种情况?看起来com.google.android.gms.license的targetSdkVersion小于4。 - darnmason
@darnmason - 是的,它确实有问题。12.0.1版本很快就会推出修复。 - ianhanniballake
@ianhanniballake 感谢您的快速回复!12.0.1版本的发布时间估计是什么时候?因为12.0.0版本预计修复了一个严重的崩溃问题,我可能已经告诉客户今天会发布新版本。 - darnmason
我刚意识到手动删除权限应该是安全的,所以现在采用这种方法。 - darnmason
@darnmason - 这仍需要几天时间。 - ianhanniballake
3
@darnmason - 12.0.1现已推出,修复了一个问题。 - ianhanniballake

6

4

如果你不熟悉安卓(像我一样!)并且不确定drmrbrewer的代码片段应该放在哪里,答案就在你的主要app/manifests/AndroidManifest.xml文件中,像这样:

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      package="com.your.package">

      ...

      <!-- attempt to combat this issue: https://dev59.com/9lkS5IYBdhLWcg3wkHl2 -->
      <uses-permission
          android:name="android.permission.READ_PHONE_STATE"
          tools:node="remove" />
      <uses-permission
          android:name="android.permission.WRITE_EXTERNAL_STORAGE"
          tools:node="remove" />
  </manifest>

1

遇到了同样的问题。刚刚检查到Google发布了新版本。更新到12.0.1或最新版本即可解决此问题。


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