如何在开发过程中禁用Crashlytics

270

在开发过程中有没有简单的方法可以关闭Crashlytics Android SDK?

我不想每次做傻事都发送一份崩溃报告。

另一方面,我也不想注释掉Crashlytics.start() ,可能会忘记取消注释并提交代码。


你尝试过从清单中删除API密钥吗?我不记得那是否会导致崩溃。 - Timmetje
@timmied 它会崩溃。在“清单”中注释整行也会导致应用程序崩溃,因此这使问题更加合法。 - Michael
31个回答

10

2
很遗憾,该文档已经过时,您所引用的标志已不再受支持,请在此处查看: https://firebase.google.com/docs/crashlytics/upgrade-sdk?hl=da&platform=android - Max Cruz

8

如果您想捕获所有崩溃(适用于调试和发布版本),但希望在Crashlytics仪表板中将它们分开,您可以将以下代码行添加到build.gradle文件中:

debug {
    versionNameSuffix "-DEBUG"
}

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

就这样?不需要做口味吗? - portfoliobuilder

6

请注意,您还可以禁用调试版本中令人讨厌的符号上传:

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中即可。


6

这里有很多好的答案,但是在我的测试中,我使用调试版本进行内部测试和实验室外的测试,在这些测试中崩溃日志仍然非常有用,我仍然想要报告它们。像问题的提出者一样,我只想在活跃开发期间禁用它们,因为我经常会引起并迅速解决崩溃。

您可以选择以下代码来只在设备连接到开发机器时禁用错误报告,而不是删除所有调试崩溃。

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

这是错误的。我使用 Crashlytics.logException(e) 记录代码中的非致命异常,但在调试构建中,此语句会抛出异常,因为 Fabric 单例未初始化。如果您使用 Crashlytics,则始终要初始化 Fabric 单例。请参见 fahmy 的答案 - naXa stands with Ukraine

6

有两种方式可以禁用以下版本的Firebase Crashlytics com.google.firebase:firebase-crashlytics:17.0.0:

  1. 在应用程序的清单文件中添加元标记

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

或者

  1. 直接在应用程序中进行配置(请注意,当设置为 false 时,新值不会在应用程序的下一次运行之前生效)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false)


5

问题在于,所有的解决方案都无法针对最新的 Crashlytics SDK(我正在使用2.9.0)进行工作。

你不能通过代码禁用它,因为它会编译到你的项目中,并在应用程序的 onCreate 方法调用之前运行。因此,另一种解决方案就很简单 - 当不需要时不要编译 Crashlytics。 在 build.gradle 文件中将 'compile' 调用替换为 'releaseCompile'。

 releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
        transitive = true
    }

5

更新的答案:从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)
        }

你也可以在调试版本中继续使用Crashlytics,但通过防止Crashlytics为每个版本生成新的ID来获得构建速度的提高。
android {
    ...
    buildTypes {
        getByName("debug") {
            extra["alwaysUpdateBuildId"] = false
        }
    }
}

或者 Groovy:
android {
    ...
    buildTypes {
        debug {
            ext.alwaysUpdateBuildId = false
        }
    }
}

请查看下面的文档链接: https://developer.android.com/studio/build/optimize-your-build#disable_crashlytics


5

如果您的应用程序中没有已经存在的类,那么创建一个继承自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"
        ........>

3

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

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

它使用了Fabric的新内置语法来处理Crashlytics,并且能够自动与Gradle构建一起工作。


3
我遇到了一个奇怪的问题:我按照 xialin 的回答(也出现在官方网站上)去操作,但是没有效果。后来发现,我在 Fabric 的包中引用了 BuildConfig ,该包中还包含一个静态 DEBUG 变量,即使在调试模式下也设置为 false。

因此,如果你按照上述解决方案仍然收到调试报告,请确保你引用的是以下内容:

import com.yourpackagename.BuildConfig;

而不是这样:

import io.fabric.sdk.android.BuildConfig;    

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