在开发过程中有没有简单的方法可以关闭Crashlytics Android SDK?
我不想每次做傻事都发送一份崩溃报告。
另一方面,我也不想注释掉Crashlytics.start()
,可能会忘记取消注释并提交代码。
在开发过程中有没有简单的方法可以关闭Crashlytics Android SDK?
我不想每次做傻事都发送一份崩溃报告。
另一方面,我也不想注释掉Crashlytics.start()
,可能会忘记取消注释并提交代码。
根据Google的建议,使用以下代码来禁用Crashlytics,并且它还能改善构建过程。
参考链接-https://developer.android.com/studio/build/optimize-your-build
如果您想捕获所有崩溃(适用于调试和发布版本),但希望在Crashlytics仪表板中将它们分开,您可以将以下代码行添加到build.gradle文件中:
debug {
versionNameSuffix "-DEBUG"
}
请注意,您还可以禁用调试版本中令人讨厌的符号上传:
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
中即可。
这里有很多好的答案,但是在我的测试中,我使用调试版本进行内部测试和实验室外的测试,在这些测试中崩溃日志仍然非常有用,我仍然想要报告它们。像问题的提出者一样,我只想在活跃开发期间禁用它们,因为我经常会引起并迅速解决崩溃。
您可以选择以下代码来只在设备连接到开发机器时禁用错误报告,而不是删除所有调试崩溃。
if (!Debug.isDebuggerConnected()) {
Fabric.with(this, new Crashlytics());
}
Crashlytics.logException(e)
记录代码中的非致命异常,但在调试构建中,此语句会抛出异常,因为 Fabric 单例未初始化。如果您使用 Crashlytics,则始终要初始化 Fabric 单例。请参见 fahmy 的答案。 - naXa stands with Ukraine有两种方式可以禁用以下版本的Firebase Crashlytics com.google.firebase:firebase-crashlytics:17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
或者
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false)
问题在于,所有的解决方案都无法针对最新的 Crashlytics SDK(我正在使用2.9.0)进行工作。
你不能通过代码禁用它,因为它会编译到你的项目中,并在应用程序的 onCreate 方法调用之前运行。因此,另一种解决方案就很简单 - 当不需要时不要编译 Crashlytics。 在 build.gradle 文件中将 'compile' 调用替换为 'releaseCompile'。
releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
transitive = true
}
更新的答案:从gradle配置中禁用crashlytics,以获得更快的构建速度。
android {
...
buildTypes {
debug {
ext.enableCrashlytics = false
}
}
}
或者 Kotlin KTS:
android {
...
buildTypes {
getByName("debug") {
extra["enableCrashlytics"] = false
}
}
}
然后通过编程:
// Initializes Fabric for builds that don't use the debug build type.
Crashlytics.Builder()
.core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build()
.also { crashlyticsKit ->
Fabric.with(this, crashlyticsKit)
}
android {
...
buildTypes {
getByName("debug") {
extra["alwaysUpdateBuildId"] = false
}
}
}
android {
...
buildTypes {
debug {
ext.alwaysUpdateBuildId = false
}
}
}
请查看下面的文档链接: https://developer.android.com/studio/build/optimize-your-build#disable_crashlytics
如果您的应用程序中没有已经存在的类,那么创建一个继承自Application的类。
然后按照以下步骤进行:
public class BaseApplication extends Application { // extend from MultidexApplication if multidex is required by your application
@Override
public void onCreate() {
super.onCreate();
/*
* Crashlytics is enabled by default,
* Disable it for debug builds & USB Debugging
* */
if(BuildConfig.DEBUG){
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
}
}
}
别忘了在你的 AndroidManifest.xml 文件中添加类名。
<application
android:name=".BaseApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
........>
使用Gradle构建时,最新的最简版本:
if (!BuildConfig.DEBUG) {
Fabric.with(this, new Crashlytics());
}
它使用了Fabric的新内置语法来处理Crashlytics,并且能够自动与Gradle构建一起工作。
BuildConfig
,该包中还包含一个静态 DEBUG 变量,即使在调试模式下也设置为 false。
因此,如果你按照上述解决方案仍然收到调试报告,请确保你引用的是以下内容:
import com.yourpackagename.BuildConfig;
而不是这样:
import io.fabric.sdk.android.BuildConfig;