在类Lcom / google / android / gms / common / internal / Preconditions中没有静态方法checkHandlerThreadLandroid / os / Handler; Ljava / lang / String;V

问题描述

在我的app / build.gradle中设置minifyEnabled true后,我面临崩溃。

implementation ('com.google.android.gms:play-services-location:17.0.0') {
    exclude group:'com.android.support',module: 'support-v4'
}
implementation 'com.google.firebase:firebase-messaging:18.0.0'
implementation 'com.google.firebase:firebase-analytics:16.5.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'

这些是我使用的Firebase库。仅当设置minifyEnabled true时才会发生崩溃。

我也尝试过启用Multidex,但仍然无法解决问题。

崩溃日志:

Process: proto.inventa.cct.com.inventaapp,PID: 30410
java.lang.NoSuchMethodError: No static method checkHandlerThread(Landroid/os/Handler;Ljava/lang/String;)V in class Lcom/google/android/gms/common/internal/Preconditions; or its super classes (declaration of 'com.google.android.gms.common.internal.Preconditions' appears in /data/app/proto.inventa.cct.com.inventaapp-hunIIikgxzy10RXjTw7TYA==/base.apk!classes4.dex)
    at com.google.android.gms.common.internal.GmsClientEventManager.onConnectionSuccess(UnkNown Source:20)
    at com.google.android.gms.common.api.internal.zaaw.zab(UnkNown Source:292)
    at com.google.android.gms.common.api.internal.zaak.zaaq(UnkNown Source:125)
    at com.google.android.gms.common.api.internal.zaak.onConnected(UnkNown Source:105)
    at com.google.android.gms.common.api.internal.zabe.onConnected(UnkNown Source:101)
    at com.google.android.gms.common.api.internal.zaq.onConnected(UnkNown Source:6)
    at com.google.android.gms.common.internal.zaf.onConnected(UnkNown Source:2)
    at com.google.android.gms.common.internal.BaseGmsClient$PostinitCallback.handleServiceSuccess(UnkNown Source:130)
    at com.google.android.gms.common.internal.BaseGmsClient$zza.deliverCallback(UnkNown Source:60)
    at com.google.android.gms.common.internal.BaseGmsClient$zza.deliverCallback(UnkNown Source:2)
    at com.google.android.gms.common.internal.BaseGmsClient$CallbackProxy.deliverCallback(UnkNown Source:51)
    at com.google.android.gms.common.internal.BaseGmsClient$zzb.handleMessage(UnkNown Source:270)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:6977)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:528)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:910)

解决方法

您需要保留这些类(可能还有更多类):

-verbose
-keep,includedescriptorclasses class com.google.android.gms.** { *; }
-keep,includedescriptorclasses class com.google.android.gms.internal.** { *; }
-keep class com.google.android.gms.internal.** {com.google.android.gms.internal.** initialize(android.content.Context);}
-keep class com.google.android.gms.iid.** {com.google.android.gms.iid.** get(java.lang.String);}
-keep,includedescriptorclasses class com.google.android.** { *; }
,

您似乎有一个依赖冲突。 play-services-location:17.0.0取决于play-services-basement:17.0.0play-services-base:17.0.0firebase-messaging:18.0.0取决于play-services-basement:16.0.1

可能您有play-services-base:17.0.0play-services-basement:16.0.1,如果play-services-base:17.0.0试图使用play-services-basement:17.0.0中引入的API,则无法使用。

尝试将firebase-messaging部门至少更新到版本19.0.0,该版本确实取决于play-services-basement:17.0.0。 同样,尝试将firebase-analytics至少更新为17.0.0

版本

还可以考虑签出严格的版本匹配器插件,如果检测到冲突,它将给您一条错误消息,而不是Gradle的默认策略,后者仅选择一个,并且如果选择错误,则可能会给出类似这样的奇怪错误消息。 https://developers.google.com/android/guides/versioning#strict_version_matching

我也强烈建议反对 -keep使用所有com.google.android软件包。这样会将所有代码保留在SDK中,即使您不使用的部分也可以,从而大大减少了收缩带来的好处。