从 Fabric 迁移到 FirebaseCrashlytics 后测试失败

Posted

技术标签:

【中文标题】从 Fabric 迁移到 FirebaseCrashlytics 后测试失败【英文标题】:After migration from Fabric to FirebaseCrashlytics tests failing 【发布时间】:2020-09-07 22:54:15 【问题描述】:

最近我们尝试从 Fabric.io 迁移到 FirebaseCrashlytics。按照文档https://firebase.google.com/docs/crashlytics/upgrade-sdk?platform=android中所述的步骤进行操作

    更新了 google-service.json 文件 用 Firebase Crashlytics 替换了 fabric.io 依赖项 仅当使用setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG) 构建 prod 时更新代码并启用收集 更新了 proguard 规则

之后,我们尝试运行我们的测试套件,因为我们注意到它比平时花费的时间要长得多,最后它失败了,许多测试报告了 OutOfMemoryError。这组测试在 Fabric 依赖项下运行得很好。 有没有人遇到过或遇到过类似的问题?

【问题讨论】:

你指的是 UI 测试吗? 不,单元测试失败了 仅供参考,您可以将 Fabric 项目从 Fabric Dashboard 迁移到 Firebase,移动应用仍然可以运行。无需更改代码。 我们去年通过 Firebase 加入了 Crashlytics(从不同的提供商迁移后)。在看到 Android 团队的更新后,我们决定更新依赖项并删除 Fabric,但在这个问题中运行:( @peter_budo 你找到解决方案了吗?我也面临同样的问题。 【参考方案1】:

好的,我确实有这方面的更新。我们刚刚将库更新到最近发布的最新版本,并且问题看起来已经排序

com.google.firebase:firebase-crashlytics-gradle:2.2.0 而不是 2.1.0 com.google.firebase:firebase-crashlytics:17.1.0 而不是 17.0.0

与哪篇原创文章一起发表

【讨论】:

我试过这个,但对我不起作用。我正在使用 RXJava 和 onError 我正在调用 FirebaseCrashlytis.getInstance().recordExeption(throwable),但它失败了。 @rupesh 那么你的问题与我的不同。在我的案例中,项目编译得很好,但是当包含单元测试时,构建会在测试路径中的某个地方出现 OutOfMemory 失败。在您的情况下,您尝试在代码中通过 RxJava 处理错误场景,如果发生这种情况,则在 Firebase 中记录异常。您最好创建新帖子,添加一些关于您在代码中执行的操作的详细信息以及您在附加任何日志时遇到的错误或崩溃【参考方案2】:

文档说 Fabric Crashlytics SDK 使用 ContentProvider 进行自我初始化。因此,在您的应用程序代码中调用 setCrashlyticsCollectionEnabled 函数为时已晚。

新 SDK 不再使用 Fabric 的 API 密钥。相反,Crashlytics 现在使用您应用的 google-services.json 文件将您的应用与您的 Firebase 项目相关联并保留您的历史崩溃数据。如果您在 AndroidManifest.xml 文件中声明了 io.fabric.ApiKey,请将其删除。

如果您想禁用自动崩溃报告并仅启用它 对于选定的用户,请在您的 AndroidManifest.xml 文件。然后,您可以使用启用崩溃报告 新的 setCrashlyticsCollectionEnabled 实例方法。

https://firebase.google.com/docs/crashlytics/upgrade-sdk?platform=android#firebaseno_longer_works_with_the_fabric_sdk

因此,您需要在清单中禁用数据收集。为此,您需要将 firebase_crashlytics_collection_enabled 元标记添加到清单中。

<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />

https://github.com/firebase/firebase-android-sdk/blob/5440af41f0d15ff1358038dc31fcd1d4eac0a89c/firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/common/DataCollectionArbiter.java#L74

您可能希望将构建变量注入清单文件,因为您只想在测试构建中禁用 Crashlytics。请参阅下面的链接。 https://developer.android.com/studio/build/manifest-build-variables.html

【讨论】:

谢谢@MertNYuksel 对不起,我没有在原始帖子中提到这一点,我确实在清单中有这个元数据收集设置,你也可以从 post boolean 中的 sn-p 看到依赖于构建配置是否调试。所以我相信我在那一点上正确地遵循了文档 好吧,我们还没有更新我们的 SDK。因此,除了检查您的合并清单或使用 jstack 命令检查运行 Java 进程的线程堆栈跟踪以找出罪魁祸首之外,我没有任何其他想法。

以上是关于从 Fabric 迁移到 FirebaseCrashlytics 后测试失败的主要内容,如果未能解决你的问题,请参考以下文章

Fabric 将项目显示为未迁移到 Firebase,但在迁移屏幕中显示为已迁移

从Fabric迁移到Firebase时未提供Google App ID或Google服务文件

Fabric Crashlytics 到 Firebase Crashlytics 迁移询问 dSYMs 文件

将从 Fabric 创建的自定义事件迁移到 Firebase?

从结构迁移到 Firebase 时,您的一个或多个项目在链接时遇到错误

Fabric crashlytics到Firebase的迁移