【问题标题】:Disable Crashlytics in Android library project for debug在 Android 库项目中禁用 Crashlytics 以进行调试
【发布时间】:2015-02-25 15:16:56
【问题描述】:

我有一个包含多个模块的项目。模块的公共代码在库模块中。问题是我们最近将 Crashlytics 添加到我们的项目中(在库模块中),即使我们处于调试模式,我们也会不断收到错误报告。

我在互联网上搜索,发现库始终被视为发布模式。现在我的问题是,有没有办法在我的情况下禁用 Crashlytics?

【问题讨论】:

  • 如果您想删除库模块的“仅发布”限制,请查看 stackoverflow.com/questions/35312743。我在我的项目中遇到了同样的问题。

标签: android module crashlytics


【解决方案1】:

在我的应用程序(单个模块,多种风味)中,我检测风味,并仅以我想要的风味初始化 Crashlytics。

在我的例子中,我在 build.gradle 中添加了一个变量,如下所示:

productFlavors {
        Dev { // i.e. gradlew assembleDevDebug
            buildConfigField 'Boolean', 'enableCrashlytics', 'false'
        }

        Qa { // i.e. gradlew assembleQaDebug
            buildConfigField 'Boolean', 'enableCrashlytics', 'true'
        }
}

然后,在我的 Application 类中,我有条件地启动 Crashlytics:

if(BuildConfig.enableCrashlytics == true) {
   Fabric.with(this, new Crashlytics());
}

【讨论】:

  • 我已经在堆栈的几个地方看到了这个答案,但它在我调用 Crashlytics.log() 的任何地方都会导致崩溃。谁能证实这一点?
  • @jwBurnside 我承认这已经晚了几年,但会为未来的读者说明这一点:是的,在没有先调用 Fabric.with() 的情况下调用 Crashlytics.log() 会使应用程序崩溃,所以我不会建议说“我们只会在发布版本中初始化 Crashlytics”。
  • 这是一个很好的观点。我(在我的 Application 类中)跟踪 Crashlytics 是否已初始化,并且仅在已初始化的情况下调用 Crashlytics.log()。实际上,我使用 Timber 进行日志记录,并为 dev 和 prod 使用不同的日志记录“树”。 prod 树在记录错误时调用 Crashlytics.log(),而开发日志则不会。
  • 我以这种方式禁用 Crashlytics CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build(); Fabric.with(this, new Crashlytics.Builder().core(core).build());
【解决方案2】:

假设您从主模块(被识别为处于调试状态)启用 Crashlytics/Fabric,只需有条件地对其进行初始化,使其不会在调试模式下激活。

例如

if (!BuildConfig.DEBUG) {
    Fabric.with(this, new Crashlytics()); 
}

【讨论】:

  • 是的,我现在应该检查它是否处于调试模式,但这就是问题所在。库模块始终被视为已发布。
  • 但正如我所说,您是从您的主应用程序而不是您的库中运行上述代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2018-02-01
相关资源
最近更新 更多