为什么要添加 READ_PHONE_STATE 权限?

Why has the READ_PHONE_STATE permission been added?

在我刚刚发布到 Play 商店的最新 beta 版本中,我注意到 READ_PHONE_STATE 已添加到之前的版本中。

我自己没有添加这个。自从以前的版本使用 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'

这样就可以了吗?我看不到它的记录。我可以取消权限吗?

而且我已经确保我使用的所有库都与主应用程序匹配,根据 this answer...对我的情况没有影响。

编辑

好的,基于 this article,我深入研究了我的日志输出以找到:

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

但是自上一个版本以来,jobdispatcher 库(我将其作为 gradle 模块导入到我的项目中)没有任何变化。

EDIT2

这是该日志的更多信息,我的感觉是可能是由于怀疑是播放服务库版本所致?

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 与上面链接的其他答案匹配,但是在这种情况下我能做些什么吗,因为播放服务库不是我的?

EDIT3

我找到了答案...而不是删除这个问题,我会留下它和解决方案,以防它对其他人有用(并且以防其他人有更好的解决方案!)

EDIT4

看起来它已在 9.6.1 中修复。

我最终找到了this, which reports the same issue. One workaround is mentioned in Answer #3,就是把权限"manually"去掉(我的假设是只有很早的Android版本才需要权限,对我来说没问题因为我的 minSdk 是 16):

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

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

更新 #2Version 10.0.1 再次修复了该问题。

更新:这也发生在 Google Play 服务的 10.0.0 版本中,如 this post.

中所报告

上一个答案:

根据 this post in the Android Developers G+ Community,其中一位版主(我)发表了以下评论:

I already reported this issue internally yesterday when a developer pointed it out, the fix has already been made internally, and an updated SDK is coming soon

更新的 SDK 现已可用 - 使用 9.6.1 Google Play 服务依赖项。

此问题也存在于 Play Services v 12.0.0 中。有空位issue tracker on it here。这两个权限似乎都存在问题:

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

它可能会在 12.0.1 中修复,正如我们在 10.0.1 修复中看到的那样(来自原始问题)。

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

更新
12.0.1 已于 2018 年 3 月 28 日发布,解决了此问题。 See the release notes here.

Adds missing minSdkVersion in -license artifacts to prevent automatic inclusion of READ_PHONE_STATE and READ_EXTERNAL_STORAGE permissions.

如果您没有使用 Android 的经验(像我一样!)并且您不确定 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:  -->
      <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>

如果您正在寻找与 Firebase 12.0.0 版相关的问题,只需升级到 12.0.1 版即可。 是12.0.0的打包错误,12.0.1解决了。

查看发行说明: https://developers.google.com/android/guides/releases

遇到同样的问题。刚刚检查 Google 发布新版本。更新到 12.0.1 或最新版本。这个问题就会消失。