Google Play 服务和 Firebase 的 ProGuard 问题

Posted

技术标签:

【中文标题】Google Play 服务和 Firebase 的 ProGuard 问题【英文标题】:ProGuard issue with Google Play Service and Firebase 【发布时间】:2017-09-01 22:48:36 【问题描述】:

在升级 Google Play 服务和相关库后,我收到来自 Proguard 的关于 firebase 消息传递的以下警告。

    播放服务:9.4.0 -> 10.2.1 MixPanel:4.9.2 -> 4.9.8 对讲:3.0.10 -> 3.1.3

这是来自com.google.firebase.messaging.*的proguard警告

Warning: com.google.firebase.messaging.FirebaseMessagingService: can't find referenced method 'com.google.firebase.iid.zzg zzabT()' in program class com.google.firebase.iid.zzg
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'java.lang.String zzcvH' in program class com.google.android.gms.internal.zzbxz$zza
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'java.lang.String zzcvH' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'java.lang.String zzcvI' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'long zzcvJ' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'java.lang.String zzcvK' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'int zzcvL' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'int zzcvM' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'java.lang.String zzcvN' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'java.lang.String zzcvO' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'java.lang.String zzcvR' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'int zzcvS' in program class com.google.android.gms.internal.zzbxz$zzb
Warning: com.google.firebase.messaging.zzc: can't find referenced field 'com.google.android.gms.internal.zzbxz$zza[] zzcvT' in program class com.google.android.gms.internal.zzbxz$zzb

我正在使用最新的播放服务。

intercomLibraryVersion = '3.1.3' // https://github.com/intercom/intercom-android/blob/master/CHANGELOG.md
mixPanelVersion = '4.9.8' // https://github.com/mixpanel/mixpanel-android/releases
playServiceVersion = '10.2.1' // https://developers.google.com/android/guides/releases

// Google Play Services
// https://developers.google.com/android/guides/setup
// https://firebase.google.com/docs/android/setup
compile "com.google.android.gms:play-services-base:$rootProject.playServiceVersion"
compile "com.google.android.gms:play-services-gcm:$rootProject.playServiceVersion"// used by - mixpanel & intercom

// Mixpanel
//https://github.com/mixpanel/mixpanel-android/releases
compile "com.mixpanel.android:mixpanel-android:$rootProject.mixPanelVersion"

// Intercom - live chat and analytics
// https://github.com/intercom/intercom-android
// https://developers.intercom.com/docs/android-installation
compile "io.intercom.android:intercom-sdk-base:$rootProject.intercomLibraryVersion"
compile "io.intercom.android:intercom-sdk-fcm:$rootProject.intercomLibraryVersion"

我可以避免这些警告的唯一方法是添加以下 proguard 规则。

-dontwarn com.google.firebase.messaging.**

有人知道这个的副作用吗?或如何解决此 Firebase 消息问题。

更新 #1 应用程序现在随机崩溃并出现以下堆栈跟踪。

04-06 14:49:28.911 25362-25455/? E/AndroidRuntime: FATAL EXCEPTION: pool-13-thread-1
    Process: com.myapp, PID: 25362
    java.lang.AbstractMethodError: abstract method "void com.google.firebase.iid.b.handleIntent(android.content.Intent)"
    at com.google.firebase.iid.b$1.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)

【问题讨论】:

目前,我已将所有版本降级为上述之前工作的版本。 Google Play 服务 10.2.6 在尝试使用我的应用程序连接 Firebase 监控时出现同样的问题 @JafarAlali92 只是好奇,下面的解决方案对你有用吗? 【参考方案1】:

当您忘记更新 Firebase 依赖项时,通常会出现此错误。

Firebase 引用必须始终与 Google 依赖项的版本相同。

这会遇到您的错误:

compile 'com.google.android.gms:play-services-gcm:10.2.1'
compile 'com.google.android.gms:play-services-maps:10.2.1'
compile 'com.google.android.gms:play-services-location:10.2.1'

compile 'com.google.firebase:firebase-auth:10.0.1'
compile 'com.google.firebase:firebase-core:10.0.1'
compile 'com.google.firebase:firebase-database:10.0.1'

这解决了错误:

compile 'com.google.android.gms:play-services-gcm:10.2.1'
compile 'com.google.android.gms:play-services-maps:10.2.1'
compile 'com.google.android.gms:play-services-location:10.2.1'

compile 'com.google.firebase:firebase-auth:10.2.1' //Updated
compile 'com.google.firebase:firebase-core:10.2.1' //Updated
compile 'com.google.firebase:firebase-database:10.2.1' //Updated

希望它能解决你的问题

【讨论】:

目前我不包括 firebase,但可能是第 3 方库。将仔细检查gradle dependencies 以找出答案,感谢您的指点。 我没有尝试再次升级库。我看到7 点赞,所以我猜你的解决方案对少数人有用。我很快会再试一次,并在此处提供我的更新。 这应该是公认的解决方案!非常感谢!拯救了我的一天

以上是关于Google Play 服务和 Firebase 的 ProGuard 问题的主要内容,如果未能解决你的问题,请参考以下文章

在没有 Google Play 服务的情况下使用 Google Firebase 远程配置?

如何将 Firebase 帐户关联到 Google Play 游戏帐户

致命异常:ScioFrontendApi 在使用适用于 Android 应用程序的 Firebase 升级 Google Play 服务时

如何将 Google Play 服务更新到 9.8.7

Google Play 游戏服务中的多人游戏 API 将不再可用。如何迁移到 Firebase?

如何使 Google Play 服务 API 和 Firebase API 的 API javadocs 出现在 Android Studio 中,而不是没有文档的反编译类?