【问题标题】:FirebaseAuth ClassCastExceptionFirebaseAuth ClassCastException
【发布时间】:2016-08-10 20:42:31
【问题描述】:

我从 Android 的深处得到了奇怪的异常:

java.lang.RuntimeException: Unable to resume activity {com.example.firebase/com.example.firebase.MainActivity}: java.lang.ClassCastException: com.google.android.gms.b.qf cannot be cast to com.google.firebase.auth.n
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2937)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2966)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367)
    at android.app.ActivityThread.access$700(ActivityThread.java:168)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:177)
    at android.app.ActivityThread.main(ActivityThread.java:5493)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassCastException: com.google.android.gms.b.qf cannot be cast to com.google.firebase.auth.n
    at com.google.android.gms.b.aw.a(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.b(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.<init>(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.<init>(Unknown Source)
    at com.google.android.gms.b.av.<init>(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.a(Unknown Source)
    at com.google.firebase.auth.FirebaseAuth.b(Unknown Source)
    at com.atlascoder.android.dollaruz.MainActivity.onResume(Unknown Source)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1209)
    at android.app.Activity.performResume(Activity.java:5450)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2922)
...

它发生在我的 AppCompatActivity 的 onResume() 回调中:

...

FirebaseAuth mAuth;

@Override
protected void onResume(){
    super.onResume();

        if (mAuth == null) {
            mAuth = FirebaseAuth.getInstance();
            mAuth.signInAnonymously().addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    FirebaseUser user = mAuth.getCurrentUser();
                    if (user != null) {
                        setActiveFragment(mActiveFragmentTag);
                    } else {
                        Toast.makeText(MainActivity.this, getString(R.string.toast_cant_auth_firebase), Toast.LENGTH_SHORT).show();
                    }
                }
            });
        } else {
            setActiveFragment(mActiveFragmentTag);
        }
}

...

它在第一次调用时不会发生,但是当我在一段时间后重新打开应用程序时。而且,更奇怪的是,即使重新启动应用程序,我也无法打开应用程序(我的意思是在设备上重新启动而不是重新安装)。

我的模块的 build.gradle 内容:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.0'
    defaultConfig {
        applicationId "com.example.firebase"
        minSdkVersion 14
        targetSdkVersion 23
        versionName '1.3'
        vectorDrawables.useSupportLibrary = true
        versionCode 4
    }
    testOptions {
        unitTests.returnDefaultValues = true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.10.19'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.google.android.gms:play-services-ads:9.2.1'
    compile 'me.grantland:autofittextview:0.2.+'
    compile 'com.google.firebase:firebase-auth:9.2.1'
    compile 'com.google.firebase:firebase-messaging:9.2.1'
    compile 'com.google.firebase:firebase-database:9.2.1'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
}

apply plugin: 'com.google.gms.google-services'

可能出了什么问题?

【问题讨论】:

  • 你需要compile 'com.google.android.gms:play-services-ads:9.2.1'吗?尝试从您的依赖项中删除它,然后重试。我怀疑这可能会导致混乱。
  • 感谢 Ishmael,但我需要这种依赖。但是为什么你认为这应该有帮助?这只是一个建议吗?
  • 这只是一个建议,以确认它会导致冲突。
  • 嗯,这真的很奇怪(我曾尝试使用早期版本构建,我记得 9.0.2,以及 com.android.support 的 23.4.0,但这些都没有帮助。无论如何,谢谢,但并不能解决问题。
  • 不确定您是否解决了错误,但可能的原因之一是您更改了 firebase 项目和 google-services.json 文件之间的 SHA1 密钥。如果你没有碰它,那么这可能是无关紧要的,但我想我会把它放在那里。

标签: android firebase firebase-authentication


【解决方案1】:

您可以在您的 proguard 文件中添加以下 proguard 规则来解决此问题。

-keepattributes Signature

在 JDK 5.0 及更高版本中编译时,需要“Signature”属性才能访问泛型类型。

com.google.android.gms.b.qf 是泛型类型。

【讨论】:

  • 感谢com.google.android.gms.b.qf的解释!实际上,这个问题似乎是通过 FirebaseAuth.getInstance().signOut() 从下面@changxw 的评论中解决的。我只是检查得不够多,但是您的详细信息很有帮助!
  • 哇,这解决了另一个不明显的运行时错误,它没有出现在调试 apk 中,随着越来越多的人尝试使用带有匿名登录的新 Firebase 数据库,您将获得更多的支持.如果您已经在使用 Google Play 服务代码,则不能像在 Doc 示例中那样使用 Google 登录,因为它不允许您同时编译 '.addApi(Games.API)' 和 '。 addApi(Auth.GOOGLE_SIGN_IN_API)'。在其他身份验证选项中,“匿名”是迄今为止使用 Google Play 服务代码最不复杂和风险最小的。这个proguard花絮应该在文档中。
【解决方案2】:

使用您发布的依赖项的代码和版本,我能够创建类似于您的崩溃堆栈,但例外情况是:

java.lang.IncompatibleClassChangeError: com.google.android.gms.internal.zzaez

当我将依赖项更改为使用 Firebase 和 Play 服务库的版本 9.4.0 时,问题就消失了。看看这是否适合你。

有很多关于使用旧版本或不一致版本的库或工具导致的异常 Firebase 问题的报告。如果可能,始终使用最新版本似乎是明智之举。

你的情况是:

compileSdkVersion 24
buildToolsVersion "24.0.1"

支持库:24.1.1

Firebase/PlayServices:9.4.0

【讨论】:

  • 谢谢!我会试试的。
  • 不幸的是,这没有帮助
  • @atlascoder:设备是否安装了最新版本的 Google Play 服务?当前版本是 9.4.52。
  • 是的,最新版本
【解决方案3】:

登录后可以在onDestroyMainActivity 中调用FirebaseAuth.getInstance().signOut(),您可以试试看。

【讨论】:

    【解决方案4】:

    作为一种解决方法,请尝试 minifyEnabled true -&gt; minifyEnabled false 它帮助了我。当然,在这个大小的 apk 增长之后,应用程序开始工作了。

    【讨论】:

    • 好的,我想过,但没有尝试。这是有道理的,因为我在异常中得到了奇怪的类和包,看起来好像进行了一些重命名。我试试看
    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2013-02-10
    相关资源
    最近更新 更多