Android端Crashlytics.logException失效:非致命异常无法显示于Firebase控制台
嘿,我之前也踩过Crashlytics非致命异常不上报的坑,结合你给出的依赖配置和场景,给你几个实用的排查和解决方向:
版本兼容性问题:你当前使用的
com.crashlytics.sdk.android:crashlytics:2.9.1和Firebase依赖(11.8.0版本)都是比较老旧的版本,存在版本兼容风险。后来Firebase已经把Crashlytics整合到自家的依赖体系中,旧的Fabric版本Crashlytics早已停止维护。建议你升级到Firebase官方整合后的Crashlytics依赖,比如:implementation 'com.google.firebase:firebase-crashlytics:17.5.0' implementation 'com.google.firebase:firebase-core:17.5.0' implementation 'com.google.firebase:firebase-messaging:21.1.0'升级后记得同步Gradle,执行
Clean Project和Rebuild Project,确保依赖替换完全。初始化正确性检查:旧版本的Fabric Crashlytics需要在Application的
onCreate方法中完成初始化,确保代码里有这段:@Override public void onCreate() { super.onCreate(); Fabric.with(this, new Crashlytics()); }如果升级到新版本的Firebase Crashlytics,初始化方式改为:
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);另外,旧版本需要确保AndroidManifest中配置了Fabric的API Key(如果是通过Firebase关联的,可能已经自动配置,但最好确认一下)。
调试与Release模式差异:调试模式下,Crashlytics可能会延迟甚至跳过非致命异常的上报。建议你打包成Release版本安装到设备上,触发异常后重启2-3次,再去Firebase控制台查看。
全局异常处理器的干扰:如果你的应用中自定义了
Thread.UncaughtExceptionHandler,一定要确保在处理异常后把异常传递给Crashlytics,比如:@Override public void uncaughtException(Thread t, Throwable e) { // 你的自定义逻辑 Crashlytics.logException(e); // 必须调用这个让Crashlytics捕获 // 或者如果是新版本:FirebaseCrashlytics.getInstance().recordException(e); }否则自定义处理器会拦截异常,导致Crashlytics收不到非致命异常。
控制台筛选条件检查:登录Firebase控制台后,切换到Crashlytics页面,确认你已经切换到「非致命」标签页,并且时间范围设置正确(比如选择「过去7天」而不是「今天」),避免因为筛选条件看不到记录。
内容的提问来源于stack exchange,提问作者Bek

