Google Play Services 9.2.1 和 google-services 插件

Posted

技术标签:

【中文标题】Google Play Services 9.2.1 和 google-services 插件【英文标题】:Google Play Services 9.2.1 and google-services plugin 【发布时间】:2016-11-21 22:07:23 【问题描述】:

我的应用需要集成google play services和firebase;所以,我下载了官方demo,编译google play services和firebase sdk,google play services和firebase sdk已经更新到v9.2.1,demo运行良好android 5.0+,但在 android 4.4.4 上崩溃。

点击here下载演示!

这是我的 build.gradle:

dependencies 
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:support-v4:23.2.1'

 compile 'com.google.firebase:firebase-core:9.2.1'
compile 'com.google.android.gms:play-services:9.2.1'


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

这是崩溃日志:

07-19 14:34:29.790 25938-25938/com.google.firebase.quickstart.analytics E/FirebaseCrash:无法初始化崩溃报告 com.google.firebase.crash.internal.zzg$zza:

com.google.android.gms.internal.zzsj$zza:找不到可接受的模块。 本地版本为 0,远程版本为 0。 在 com.google.firebase.crash.internal.zzg.zzbq(未知来源) 在 com.google.firebase.crash.FirebaseCrash。(未知来源) 在 com.google.firebase.crash.FirebaseCrash.getInstance(未知来源) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.google.firebase.FirebaseApp.zza(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.zzeh(未知来源) 在 com.google.firebase.provider.FirebaseInitProvider.onCreate(未知 资源) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1591) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1562) 在 com.google.firebase.provider.FirebaseInitProvider.attachInfo(未知 资源) 在 android.app.ActivityThread.installProvider(ActivityThread.java:5038) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4632) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4566) 在 android.app.ActivityThread.access$1500(ActivityThread.java:145) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1276) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:5266) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:826) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:642) 在 dalvik.system.NativeStart.main(本机方法) 引起:com.google.android.gms.internal.zzsj$zza:不可接受 模块找到。本地版本为 0,远程版本为 0。 在 com.google.android.gms.internal.zzsj.zza(未知来源) 在 com.google.firebase.crash.internal.zzg.zzbq(未知来源) 在 com.google.firebase.crash.FirebaseCrash。(未知来源) 在 com.google.firebase.crash.FirebaseCrash.getInstance(未知 资源) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.google.firebase.FirebaseApp.zza(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.initializeApp(未知来源) 在 com.google.firebase.FirebaseApp.zzeh(未知来源) 在 com.google.firebase.provider.FirebaseInitProvider.onCreate(未知 资源) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1591) 在 android.content.ContentProvider.attachInfo(ContentProvider.java:1562) 在 com.google.firebase.provider.FirebaseInitProvider.attachInfo(未知 资源) 在 android.app.ActivityThread.installProvider(ActivityThread.java:5038) 在 android.app.ActivityThread.installContentProviders(ActivityThread.java:4632) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4566) 在 android.app.ActivityThread.access$1500(ActivityThread.java:145) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1276) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:5266) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:826) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:642) 在 dalvik.system.NativeStart.main(Native Method)

有人可以帮助我吗?

【问题讨论】:

请分享您使用的演示项目的链接或分享一些源代码 请使用这个代替 play service com.google.android.gms:play-services-maps:9.2.1 。让我知道结果 嗨 V V,谢谢你的回答,但这不符合我的要求 【参考方案1】:

作为第一步,您应该确定您的应用需要的特定 Play 服务 API,并且只包括那些而不是 com.google.android.gms:play-services。将 play-services 列为依赖项会拉入所有 Play 服务并导致超出方法引用的 64K 限制。这在棒棒糖之前的设备上运行时会产生问题。

播放服务 API 的完整列表是 provided here,而 Firebase API 是 listed here。找到您需要的并将它们列在您的依赖项中,而不是 com.google.android.gms:play-services

要了解当您指定play-services 作为依赖项时拉入的所有库,您可以查看this gist 或打开Gradle 的Android Studio 工具窗口并在@ 下运行androidDependencies 任务987654329@.

【讨论】:

【参考方案2】:

Firebase 现在包含在 google-play-services 中 - 请参阅 https://developers.google.com/android/guides/releases#june_2016_-_v92 。但不知何故,API 19(又名 Android 4.4)上的播放服务不包含可用的 firebase 文件。所以你要做的是,只编译播放服务中使用的 API,并从它们中排除 Firebase。

所以删除行 compile 'com.google.android.gms:play-services:9.2.1' 并替换为 compile 'com.google.android.gms:play-services-NAME_OF_USED_API:9.2.1'

替代方案您可以使用不包含 Firebase 的旧版 google-play-services。

【讨论】:

以上是关于Google Play Services 9.2.1 和 google-services 插件的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 服务库更新和缺少符号 @integer/google_play_services_version

使用 google-play-services 进行 Proguard

如何为项目使用不同版本的 google-play-services 库

为啥 Localytics 需要 google-play-services:ads?

没有要导入的项目 - 对于 google-play-services_lib

com.google.android.gms:play-services-maps 的最佳 sdk 版本是啥?