如何在开发时禁用Crashlytics

有什么简单的方法可以在开发时closuresCrashlytics Android SDK?

我不想让我每次做一些愚蠢的事情都会发生崩溃

另一方面,我不想评论Crashlytics.start() ,可能会忘记取消注释并提交

Marc来自Crashlytics这里。 在进行debugging时,有几种方法可以禁用Crashlytics!

  1. 使用不同的android:versionString进行debugging和版本构build,然后从debugging版本的Crashlytics web仪表板中禁用崩溃报告。

  2. 将调用Crashlytics.start()调用到检查debugging标志的if语句中。 您可以使用自定义标志或像这里提出的方法: 如何检查APK是否签名或“debugging构build”?

我从Crashlytics(与Fabric集成)中find了解决scheme,

把下面的代码放在你的Application类中onCreate()

 Crashlytics crashlytics = new Crashlytics.Builder().disabled(BuildConfig.DEBUG).build(); Fabric.with(this, crashlytics); 

编辑:

在Crashalitics 2.3及以上版本中,这已被弃用。 正确的代码是:

 CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build(); Fabric.with(this, new Crashlytics.Builder().core(core).build()); 

要么

 Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build()); 

(从Crashlytics禁用的方法中复制() )


EDIT2:

您也可以select将其添加到buildType中的buildType中。 该命令禁止发送crashlytics映射文件并为每个构build生成一个ID,这将加速这些flavor的gradle构build。 (它不会在运行时禁用Crashlytics。) 请参阅Mike B的答案。

 buildTypes { release { .... } debug { ext.enableCrashlytics = false } } 

如果你使用Gradle,只需将它添加到一个风格:

 ext.enableCrashlytics = false 

看看最新的文档。 https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup

除了在build.grade中添加ext.enableCrashlytics = false之外,

 Crashlytics crashlyticsKit = new Crashlytics.Builder() .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()) .build(); // Initialize Fabric with the debug-disabled crashlytics. Fabric.with(this, crashlyticsKit); 

我发现这是最简单的解决scheme:

  release { ... buildConfigField 'Boolean', 'enableCrashlytics', 'true' } debug { buildConfigField 'Boolean', 'enableCrashlytics', 'false' } 

以上enableCrashlyticsBuildConfig文件中创build一个名为enableCrashlytics的静态布尔字段,您可以使用它来决定是否启动Fabric

  if (BuildConfig.enableCrashlytics) Fabric.with(this, new Crashlytics()); 

注意:使用此方法,Fabrics仅在发布版本中初始化(如上面的代码所示)。 这意味着您需要将调用静态方法放在Crashlytics类的if块中,该块检查织物是否已经初始化,如下所示。

 if (Fabric.isInitialized()) Crashlytics.logException(e); 

否则,在模拟器上testing时,应用程序会Must Initialize Fabric before using singleton()错误Must Initialize Fabric before using singleton()

MyApplication#onCreate()

 if (!BuildConfig.DEBUG) Crashlytics.start(this); 

编辑如果您升级到Fabric,请改用此答案 。

这里有很多很好的答案,但是对于我的testing,我使用内部testing版和实验室外testing的debugging版本,其中崩溃日志仍然非常有用,我仍然想要报告它们。 就像OP一样,我只想在我经常造成的快速发展中禁用它们,并迅速解决崩溃问题。

而不是删除所有的debugging崩溃,您可以select只使用下面的代码,而设备连接到您的开发机器时禁用报告。

 if (!Debug.isDebuggerConnected()) { Fabric.with(this, new Crashlytics()); } 

如果要捕获所有崩溃(用于debugging版本和发行版本),但要将它们分离到Crashlytics仪表板中,则可以将以下代码行添加到build.gradle:

 debug { versionNameSuffix "-DEBUG" } 

例如,如果您的应用的版本名称是1.0.0,则您的发布版本将被标记为1.0.0,而debugging版本将为1.0.0-DEBUG

请注意,您也可以在debugging版本中禁用恼人的上传符号:

 def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug" def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug" tasks.whenTaskAdded { task -> if (crashlyticsUploadStoredDeobsDebug.equals(task.name) || crashlyticsUploadDeobsDebug.equals(task.name)) { println "Disabling $task.name." task.enabled = false } } 

把它放到应用程序模块的build.gradle中。

使用Gradle构build时,使用最新的最简单的版本:

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

它使用面料Crashlytics的新内置语法,并自动使用Gradle构build。

如果您担心BuildConfig.DEBUG设置不正确,请改用ApplicationInfo

 boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0; Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build(); Fabric.with( uIContext, crashlytics ); 

我遇到了一个奇怪的问题:我跟着夏凌的回答(也出现在官网上),并没有奏效。 原来,我在Fabric的包中引用了BuildConfig ,它也包含一个静态的DEBUGvariables,即使在debugging模式下它也被设置为false。

所以,如果你遵循上述的解决scheme,你仍然得到debugging报告,请确保你引用这个:

 import com.yourpackagename.BuildConfig; 

而不是这个:

 import io.fabric.sdk.android.BuildConfig; 

另一种方法,如果你只想在你的IDE上做,就是注销插件。 显然它会停止发送报告,而你没有再次login生成生成。

使用风味或build立configuration。 为开发版本使用一个单独的构build标识符,所有的崩溃将继续到一个单独的应用程序。 可以方便地与同伴共享构build或在没有debugging器的情况下使用它。 像这样的东西 –

  productFlavors { dev { applicationId "io.yourapp.developement" } staging { applicationId "io.yourapp.staging" } production { applicationId "io.yourapp.app" } 

我知道这是愚蠢的回答
刚刚评论Fabric.with(this, new Crashlytics()); ,在这个工作上,并且在你想释放它时取消注释。