Firebase控制台中ANR发生时无法查看设备数据的原因咨询
你好,我之前也碰到过类似的问题,结合你使用的Firebase BOM版本2.9.2和Crashlytics版本18.3.1,大概率是以下几个原因导致的:
版本兼容性与功能迭代问题:Firebase BOM 2.9.2是2022年中发布的旧版本,当时的Crashlytics对ANR的元数据捕获支持还不完善。普通崩溃(Crash)是应用进程直接终止,Crashlytics能在崩溃瞬间同步抓取全量设备状态数据;但ANR是系统判定应用无响应后触发的,早期版本的Crashlytics并没有把RAM剩余量、磁盘空闲空间、设备方向这类字段纳入ANR的默认上报内容里——这些增强功能是在后续版本(比如Crashlytics 19.x及以上,对应Firebase BOM 3.0+)才逐步完善的。另外,你手动指定了Crashlytics版本
18.3.1,而BOM 2.9.2默认对应的Crashlytics版本是18.2.1,手动指定的版本和BOM管理的版本可能存在隐性冲突,导致部分采集功能异常。ANR与崩溃的上报机制差异:ANR的触发和上报流程和普通崩溃完全不同。ANR发生时,系统会先生成ANR trace文件,Crashlytics是基于这个trace来完成上报的;而早期版本的Crashlytics在处理ANR时,并没有主动去额外采集RAM、磁盘这类实时设备状态数据,而崩溃时是通过崩溃钩子直接采集,这就导致两者的上报内容出现了差异。
进程状态与权限限制:ANR发生时,应用进程可能处于被系统限制的状态(比如后台无响应场景),此时Crashlytics的采集进程可能无法正常访问系统的设备状态接口;而崩溃发生时应用通常还在前台活跃状态,权限访问不受限制,所以能顺利拿到这些数据。
给你的几个解决建议:
- 移除手动指定的Crashlytics版本,完全依赖Firebase BOM管理版本,避免版本冲突:
implementation platform('com.google.firebase:firebase-bom:2.9.2') implementation 'com.google.firebase:firebase-crashlytics' - 尝试升级Firebase BOM到较新的稳定版本(比如
3.2.0及以上),对应Crashlytics版本会同步升级,新版本对ANR的元数据捕获做了大量优化,应该能包含你需要的设备信息。 - 确认应用的
firebase_crashlytics_collection_enabled配置为true(默认开启,但可以在AndroidManifest.xml或gradle中检查),确保ANR捕获功能正常启用。
内容来源于stack exchange

