在Android库项目中禁用Crashlytics以进行调试

3

我有一个包含多个模块的项目。这些模块的通用代码在库模块中。问题是我们最近在项目中(在库模块中)添加了Crashlytics,即使我们处于Debug模式下,仍然会收到错误报告。

我在互联网上搜索并发现库模块总是被视为Release模式。那么我的问题是,是否有办法在我的情况下禁用Crashlytics?


如果你想要移除库模块上的“仅发布”限制,可以查看stackoverflow.com/questions/35312743。我在我的项目中也遇到了同样的问题。 - jwBurnside
2个回答

12

在我的应用程序中(一个单独的模块,多个变体),我检测变体,仅在我想要的变体中初始化Crashlytics。

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

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

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

然后,在我的应用程序类中,我有条件地启动Crashlytics:

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

1
我在 Stack 的几个地方看到了这个答案,但是无论我在哪里调用 Crashlytics.log() 都会导致崩溃。有人能够确认一下吗? - jwBurnside
@jwBurnside 我知道这已经晚了几年,但是为了未来的读者,我要说一下:是的,在没有先调用Fabric.with()的情况下调用Crashlytics.log()会导致应用程序崩溃,因此我不建议采用“我们只会在发布版本中初始化Crashlytics”的方法。 - Chad Schultz
这是一个很好的点。我在我的应用程序类中跟踪Crashlytics是否已经初始化,只有在它被初始化后才调用Crashlytics.log()。实际上,我使用Timber进行日志记录,并为开发和生产环境设置不同的日志“树”。生产环境的日志树在记录错误时调用Crashlytics.log(),而开发环境的日志则不会。 - GreyBeardedGeek
我以以下方式禁用Crashlytics CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build(); Fabric.with(this, new Crashlytics.Builder().core(core).build()); - Kamlesh

6
假设您从主模块启用Crashlytics/Fabric(该模块被识别为调试模式),只需有条件地初始化它,以便在调试模式下不激活它。
例如:
if (!BuildConfig.DEBUG) {
    Fabric.with(this, new Crashlytics()); 
}

是的,我知道我应该检查它是否处于调试模式,但这就是问题所在。库模块总是被视为发布状态。 - Laura
但正如我所说的,你正在从主应用程序而不是从库中运行上述代码。 - Kuffs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接