无法获取提供商 com.google.android.gms.measurement.AppMeasurementContentProvider

Posted

技术标签:

【中文标题】无法获取提供商 com.google.android.gms.measurement.AppMeasurementContentProvider【英文标题】:Unable to get provider com.google.android.gms.measurement.AppMeasurementContentProvider 【发布时间】:2016-07-06 01:34:50 【问题描述】:

我尝试按照Set up a GCM Client App on android 中的说明在我的项目中设置 GCM,并为Set Up Google Play Services 添加了依赖项

  compile "com.google.android.gms:play-services-gcm:8.4.0"

到我的应用程序 build.gradle 文件的依赖项部分。

并在根 gradle 文件中添加示例项目中给出的类路径(从$ git clone https://github.com/googlesamples/google-services.git 克隆的示例)为

dependencies 
    classpath 'com.android.tools.build:gradle:2.0.0-beta6'
    classpath 'com.google.gms:google-services:2.0.0-beta6'

运行良好,但在启动时崩溃并显示以下堆栈跟踪:

java.lang.RuntimeException: 无法获取提供者 com.google.android.gms.measurement.AppMeasurementContentProvider: java.lang.NullPointerException:空引用 在 android.app.ActivityThread.installProvider(ActivityThread.java:5156) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4748) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688) 在 android.app.ActivityThread.-wrap1(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.NullPointerException:空引用 在 com.google.android.gms.common.internal.zzx.zzy(未知来源) 在 com.google.android.gms.measurement.internal.zzt.zzaU(未知来源) 在 com.google.android.gms.measurement.AppMeasurementContentProvider.onCreate(未知 资源) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1748) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1723) 在 android.app.ActivityThread.installProvider(ActivityThread.java:5153) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4748) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4688) 在 android.app.ActivityThread.-wrap1(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

还尝试了相关的堆栈问题:

    Updating Play services from 8.1 to 8.3 with Proguard enabled Error on some devices - couldn't find class 'com.google.android.gms.measurement.internal.zzz'

在第一个链接中回答尝试了类路径

classpath 'com.google.gms:google-services:1.5.0'

正如在第二个链接中回答的那样,尝试了 Multidex 也没有成功。

还尝试了应用程序测量添加

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <integer name="google_app_measurement_enable">0</integer>
</resources>

如Play Services Release notes 建议的那样。

注意:示例代码正在运行。


更新:

有趣的是即使我只添加依赖项也会出现同样的错误

  compile "com.google.android.gms:play-services-gcm:8.4.0"

在我的app gradle文件中(注:Existing project中只添加了一行)。添加后没有错误

compile "com.google.android.gms:play-services-gcm:8.1.0"

即该令牌适用于 8.1.0。很有趣,不是吗?

【问题讨论】:

8.4.0 中没有方法com.google.android.gms.common.internal.zzx.zzy。您确定不将多个 gms 模块与不同版本混合使用吗?可能跨越多个 build.gradle 文件。 会检查并通知您。 所有 gms 模块仅在 app gradle 文件中具有相同的 8.4.0 版本。 【参考方案1】:

您是否记得将插件添加到您的应用级 build.gradle 文件的结尾? ...

apply plugin: 'com.google.gms.google-services'

您特别需要将其添加到文件的最末尾

请看这里以供参考:https://github.com/googlesamples/google-services/blob/master/android/gcm/app/build.gradle

还有一个关于这个问题的错误报告:Issue 193112

【讨论】:

@GiruBhai - 我确实“正确”地阅读了这个问题,我的朋友。你没有提到你在 Gradle 文件中包含了 plugin 行。我还提到了关于这个问题的错误报告,其中有几个。我建议您多阅读这些错误报告。祝你好运!【参考方案2】:

从 Android Studio 菜单转到:

构建 → 清理项目

构建 → 重建项目

运行应用程序。不再崩溃。

注意:我使用的是最新版本的播放服务:

compile 'com.google.android.gms:play-services:8.4.0'

【讨论】:

感谢回答,但它甚至没有重新启动 AS。而且正如播放服务所建议的那样,“从 6.5 版开始,您可以有选择地将 Google Play 服务 API 编译到您的应用程序中”。所以我们添加了`编译 "com.google.android.gms:play-services-gcm:8.4.0" compile "com.google.android.gms:play-services-gcm:8.4.0" 以摆脱 dex 限制。【参考方案3】:

尝试更改您的类路径依赖项,而不是 'classpath 'com.google.gms:google-services:2.0.0-beta6'',使用 classpath ' 类路径 'com.google.gms:google-services:1.5.0''。

这是一个相关的stack overflow ticket,您可以查看社区提供的解决方案:。据说他们已经提交了错误票,并且上述修复已在足部服务插件的 1.5.0 版本中实现。

【讨论】:

以上是关于无法获取提供商 com.google.android.gms.measurement.AppMeasurementContentProvider的主要内容,如果未能解决你的问题,请参考以下文章

Admob横幅广告未在Android P中加载

无法从 ganache 提供商处获取帐户

无法获取提供商 com.google.android.gms.measurement.AppMeasurementContentProvider

连接到 Web 服务 - 令牌提供者无法获取目标令牌

无法使用 Kivy 获取窗口或文本提供程序

无法获取提供者 androidx.lifecycle.ProcessLifecycleOwnerInitializr