无法获取提供商 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的主要内容,如果未能解决你的问题,请参考以下文章
无法获取提供商 com.google.android.gms.measurement.AppMeasurementContentProvider