我从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);
}
}
...
首次调用时会出现no,但是在一段时间后重新打开应用程序时会出现。而且,更奇怪的是,即使在重新启动应用程序后我也无法打开应用程序(我的意思是重启设备而不是重新安装)。
我的模块的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'
可能出现什么问题?
答案 0 :(得分:3)
您可以在proguard文件中添加以下proguard规则来解决此问题。
-keepattributes Signature
在JDK 5.0及更高版本中进行编译时,需要“Signature”属性才能访问泛型类型。
com.google.android.gms.b.qf
是一种通用类型。
答案 1 :(得分:1)
使用您发布的依赖项的代码和版本,我能够创建与您类似的崩溃堆栈,但例外是:
java.lang.IncompatibleClassChangeError: com.google.android.gms.internal.zzaez
当我更改依赖项以使用Firebase和Play服务库的版本9.4.0
时,问题就消失了。看看它是否适合你。
有许多关于使用较旧或不一致版本的库或工具导致的异常Firebase问题的报告。如果可能的话,总是使用最新版本似乎是明智的。
在你的情况下,那些将是:
compileSdkVersion 24
buildToolsVersion "24.0.1"
支持libs:24.1.1
Firebase / PlayServices:9.4.0
答案 2 :(得分:0)
作为一种解决方法尝试
minifyEnabled true -> minifyEnabled false
它帮助了我。当然,在这个尺寸的apk增长之后,应用程序开始起作用了。
答案 3 :(得分:0)
FirebaseAuth.getInstance().signOut()
onDestroy
内致电MainActivity
,即可试用。