Lcom/google/android/gms/common/internal/Preconditions 类中没有静态方法 checkHandlerThread(Landroid/os/Handle
Posted
技术标签:
【中文标题】Lcom/google/android/gms/common/internal/Preconditions 类中没有静态方法 checkHandlerThread(Landroid/os/Handler;Ljava/lang/String;)V【英文标题】:No static method checkHandlerThread(Landroid/os/Handler;Ljava/lang/String;)V in class Lcom/google/android/gms/common/internal/Preconditions 【发布时间】:2021-02-11 20:19:04 【问题描述】:在我的 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)
【问题讨论】:
【参考方案1】:您需要保留这些类(可能还有更多):
-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.** *;
【讨论】:
好的。因此,如果我再次遇到这样的崩溃,我应该将这些类添加到我的 proguard 规则中,对吗? 我添加了上述规则。它仍然给我同样的崩溃。 使用-verbose
开关,它应该会告诉你该做什么。【参考方案2】:
您似乎有依赖冲突。
play-services-location:17.0.0
取决于 play-services-basement:17.0.0
和 play-services-base:17.0.0
但
firebase-messaging:18.0.0
依赖于 play-services-basement:16.0.1
可能是您有play-services-base:17.0.0
但play-services-basement:16.0.1
,如果play-services-base:17.0.0
尝试使用play-services-basement:17.0.0
中引入的API,这将不起作用。
尝试将您的firebase-messaging
dep 更新到至少版本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
ing 所有com.google.android
包。这将保留 SDK 中的所有代码,甚至包括您不使用的部分,从而大大减少收缩带来的好处。
【讨论】:
以上是关于Lcom/google/android/gms/common/internal/Preconditions 类中没有静态方法 checkHandlerThread(Landroid/os/Handle的主要内容,如果未能解决你的问题,请参考以下文章