Firebase AuthUI抛出NoClassDefFoundError:无法解析zzbgl类
我的App在调用以下代码时突然崩溃,这段代码之前一直正常运行,我没有修改过代码或任何依赖,但今天突然出现问题:
if (FirebaseAuth.getInstance().getCurrentUser() == null) { startActivityForResult( AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.shape_circle) .build(), RC_SIGN_IN); }
崩溃抛出的异常信息如下:
05-29 20:57:58.875 11408-11408/com.example.jonas.trainingslog1 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.jonas.trainingslog1, PID: 11408 java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/internal/zzbgl; at com.firebase.ui.auth.util.GoogleApiUtils.getCredentialsClient(GoogleApiUtils.java:20) at com.firebase.ui.auth.viewmodel.AuthViewModelBase.onCreate(AuthViewModelBase.java:32) at com.firebase.ui.auth.viewmodel.ViewModelBase.init(ViewModelBase.java:23) at com.firebase.ui.auth.KickoffActivity.onCreate(KickoffActivity.java:33) at android.app.Activity.performCreate(Activity.java:7130) at android.app.Activity.performCreate(Activity.java:7121) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1262) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2905) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3060) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:110) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1800) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6649) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826) 05-29 20:57:58.876 11408-11442/com.example.jonas.trainingslog1 V/FA: Activity paused, time: 1808810 05-29 20:57:58.876 11408-11408/com.example.jonas.trainingslog1 E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.internal.zzbgl" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/base.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_resources_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1-zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1-zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.jonas.trainingslog1-zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectori es=[/data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/base.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1-zQJYHa_fJvVM5m38ZSfIlA==/split_lib_dependencies_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_resources_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_0_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_1_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_2_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_3_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_4_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_5_apk.apk!/lib/x86, /data/app/com.example.jonas.trainingslog1- zQJYHa_fJvVM5m38ZSfIlA==/split_lib_slice_6_apk.apk!/lib/x86, /dat
这个错误是典型的Firebase UI Auth与Google Play服务/Firebase SDK版本不兼容导致的,哪怕你没手动修改依赖,构建工具可能自动拉取了更新的依赖版本,或者本地缓存出现了问题。试试下面的步骤:
统一Firebase相关依赖版本:
打开你的build.gradle(Module级别),确保Firebase Auth、Firebase UI Auth的版本完全匹配官方推荐的组合。你可以在根build.gradle里统一配置版本变量,避免版本不一致:buildscript { ext { firebaseVersion = "21.0.1" firebaseUiVersion = "7.2.0" } // ...其他配置 }然后在Module的
build.gradle里引用:implementation "com.google.firebase:firebase-auth:$firebaseVersion" implementation "com.firebaseui:firebase-ui-auth:$firebaseUiVersion"清理构建缓存:
这是解决这类诡异缓存问题的常用方法。在Android Studio里点击File -> Invalidate Caches...,选择Invalidate and Restart;或者用命令行执行:./gradlew clean ./gradlew build检查依赖冲突:
执行./gradlew app:dependencies查看你的依赖树,看看有没有不同版本的com.google.android.gms或com.google.firebase依赖。如果有,在根build.gradle的allprojects块里强制统一版本:allprojects { repositories { // ...仓库配置 } configurations.all { resolutionStrategy { force 'com.google.android.gms:play-services-auth:20.2.0' force "com.google.firebase:firebase-auth:$firebaseVersion" } } }检查设备上的Google Play服务版本:
如果你的测试设备上Google Play服务版本过旧,也可能导致找不到对应的内部类。打开设备的Google Play商店,搜索“Google Play服务”,确保它是最新版本。启用Multidex(可选):
虽然这个错误主要是版本问题,但如果你的App方法数较多,也可能导致Dex打包时遗漏类。在Module的build.gradle里启用Multidex:android { defaultConfig { // ...其他配置 multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' }然后让你的Application类继承
MultiDexApplication,或者在attachBaseContext里调用MultiDex.install(this)。
按照这些步骤逐一排查,应该能解决你的崩溃问题。
内容的提问来源于stack exchange,提问作者Jonas

