【问题标题】:Can't disable Crashlytics in a Firebase app (anymore)无法在 Firebase 应用中禁用 Crashlytics(不再)
【发布时间】:2017-10-22 19:52:37
【问题描述】:

升级到 com.crashlytics.sdk.android:crashlytics:2.7.1@aar(从 2.6.8 开始)后,我无法再在我的 Firebase 应用中禁用 Crashlytics。

Crashlytics 库本身中似乎有一些代码可以在检测到 Fabric 正在 Firebase 应用程序中运行时使用启用的 Crashlytics 工具包初始化 Fabric。实际上,在启用 Crashlytics 和 ext.enableCrashlytics = false 的情况下进行初始化会引发 UnmetDependencyException 并在启动时使应用程序崩溃(事实上,在我的 Application.onCreate 中的代码运行之前)。

有人知道解决方法吗?现在坚持使用 2.6.8。 这就是我在升级之前一直有效的代码:

app/build.gradle:

ext.enableCrashlytics = false

Application.java(onCreate,按要求提供完整的方法体):

super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
    return;
}
LeakCanary.install(this);
// First Fabric invocation
Fabric.with(this, new Crashlytics.Builder().core(
    new CrashlyticsCore.Builder().disabled(true).build()).build());
RxJavaPlugins.setErrorHandler(e -> LOGGER.error("Undeliverable RxJava error", e));
// First Firebase invocation
FirebaseDatabase db = FirebaseDatabase.getInstance();
if (BuildConfig.DEBUG) {
    db.setLogLevel(com.google.firebase.database.Logger.Level.DEBUG);
}
db.setPersistenceEnabled(true);

【问题讨论】:

  • 阅读您的帖子后,我对 2.7.1 进行了相同的升级,但没有崩溃,尽管第一次构建失败,我不得不清理项目并重新构建。看起来你的设置是正确的described in the documentation
  • 来自 Fabric 的 Mike。我正在进一步研究,但你能分享你的 Firebase 初始化代码吗?特别是 Firebase 和 Fabric 的顺序,哪个先出现?
  • @BobSnyder:我尝试了清理和重建,也尝试了 Android Studio 中的“使缓存无效并重新启动”,不幸的是它没有帮助。不过感谢您的提示!
  • @MikeBonnell:感谢您的关注,更新了帖子。

标签: firebase crashlytics crashlytics-android


【解决方案1】:

根据麦克的回答,我添加了我的代码:

Gradle:

buildTypes {
   release {
        manifestPlaceholders = [crashlyticsEnabled: true]
    }

    debug {
        manifestPlaceholders = [crashlyticsEnabled: false]
    }
}

Manifest.xml:

<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="${crashlyticsEnabled}" />

【讨论】:

    【解决方案2】:

    来自 Fabric 的 Mike。使用:

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

    如果您想在使用 Firebase 时禁用 Crashlytics。

    【讨论】:

    • 谢谢迈克!有什么方法可以有条件地禁用 Crashlytics(在清单绑定的构建类型之外)?我不希望来自开发人员工作站的“仪表化”构建类型的 Crashlytics 报告,但我确实希望来自构建服务器的 Crashlytics 报告,所以我检查了build.gradle 中的一个环境变量,以有条件地将enableCrashlytics 设置为真/假。
    • @J.Williams:manifestPlaceholder 的值 firebase_crashlytics_collection_enabled 会满足您的需要吗?
    • @Mike 是否也有办法为 iOS 禁用 Crashlytics(使用 Firebase 时)?仅用于调试构建
    • 感谢@nick_kryloff 的建议。我们在此处列出:firebase.google.com/docs/crashlytics/… 但我会与团队分享反馈。
    【解决方案3】:

    连同上述答案的麦克风,

    如果您在代码中的某处设置 firebase 崩溃属性,请确保您没有为调试代码设置它们,否则您可能会注意到应用的奇怪行为。

       if (!BuildConfig.DEBUG) {
           Crashlytics.setUserIdentifier(DataStore.storeId)
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2020-10-04
      • 2019-09-04
      • 2018-09-02
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多