问题描述
在我的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.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
部门至少更新到版本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中,即使您不使用的部分也可以,从而大大减少了收缩带来的好处。