【问题标题】:Why has the READ_PHONE_STATE permission been added?为什么添加了 READ_PHONE_STATE 权限?
【发布时间】:2018-08-31 20:22:53
【问题描述】:

在我刚刚发布到 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

该日志中还有更多内容,我的感觉是可能是由于怀疑是 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 &lt; 4 与上面链接的其他答案匹配,但是在这种情况下我能做些什么,因为 play-services 库不是我的?

EDIT3

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

EDIT4

看起来它已在9.6.1 中修复。

【问题讨论】:

    标签: android android-permissions


    【解决方案1】:

    我最终找到了this,它报告了同样的问题。 Answer #3 中提到了一种解决方法,即“手动”删除权限(我的假设是只有非常早期的 Android 版本才需要该权限,这对我来说没问题,因为我的 minSdk 是 16):

    <manifest ...
        xmlns:tools="http://schemas.android.com/tools"
        ... >
    
    <uses-permission
        android:name="android.permission.READ_PHONE_STATE"
        tools:node="remove" />
    

    【讨论】:

    • 问题是,它会破坏谷歌服务功能吗?你有遇到什么问题吗?
    • 在早期的 android 版本上甚至不需要该权限。相反,这里发生的情况是,该权限甚至在早期的 android 版本上存在,而现在需要该权限的功能根本不需要任何权限。如果 android studio 认为您有不知道权限的旧代码,则会添加权限。
    • 这应该被视为一种解决方法,直到发布修复程序。事实上,Mikkel Jørgensen 下面提到的问题没有任何进展。
    • 我在下面添加了一些关于在哪里为没有经验的机器人(比如我自己)放置这个解决方法的细节。谢谢drmrbrewer。
    • 即使在添加 tools:node="remove" 之后,如果我运行命令 cordova build android 它再次将权限 READ_PHONE_STATE 添加到 android manifest.xml。任何解决方案从清单文件中删除权限 READ_PHONE_STATE?跨度>
    【解决方案2】:

    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.

    在 -license 工件中添加缺少的 minSdkVersion 以防止自动包含 READ_PHONE_STATE 和 READ_EXTERNAL_STORAGE 权限。

    【讨论】:

    • 很好的解决方案,但是如果您使用 Crashlytics + Firebase v12.0.0 + 手动删除权限的组合,它会崩溃。留在 v11.8.0 上似乎是安全的。我认为问题出在模块 'com.google.android.gms:play-services-maps:12.0.0'
    • 我同意 - 我也保留 11.8.0 直到修复到达
    • 请检查我的回答。它刚刚在 12.0.1 Firebase 版本中修复。
    • 我可以确认 12.0.1 版本解决了这个问题。
    【解决方案3】:

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

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

    上一个答案:

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

    我昨天已经在内部报告了这个问题,当时有开发者指出,内部已经修复,更新的 SDK 即将推出

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

    【讨论】:

    • @ianhanniballake 这在 12.0.0 版本中是否再次发生?看起来 com.google.android.gms.license 有一个 targetSdkVersion
    • @darnmason - 是的。 12.0.1 应该很快就会修复。
    • @ianhanniballake 感谢您的快速回复!有 12.0.1 版本的估计吗?我可能已经告诉客户我今天会发布一个版本,因为 12.0.0 预计会修复严重的崩溃
    • 我刚刚意识到手动删除权限应该是安全的,所以现在就这样做
    • @darnmason - 12.0.1 现已发布并修复
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      如果您没有使用过 Android(像我一样!)并且不确定 drmrbrewer 的 sn-p 应该放在哪里,答案就在您的主 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://stackoverflow.com/questions/39668549/why-has-the-read-phone-state-permission-been-added -->
            <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>
      

      【讨论】:

        【解决方案6】:

        面临同样的问题。刚刚检查了谷歌发布了新版本。更新到 12.0.1 或最新版本。这个问题就会消失。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-25
          • 2016-11-22
          • 1970-01-01
          • 2022-12-02
          • 2016-12-24
          相关资源
          最近更新 更多