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

我不希望每次我做一些愚蠢的事情时它都会崩溃

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


当前回答

这里有很多好的答案,但对于我的测试,我使用内部测试和实验室外测试的调试版本,其中崩溃日志仍然非常有用,我仍然希望报告它们。就像OP一样,我所希望的是在活跃的开发过程中禁用它们,因为我经常导致和快速解决崩溃。

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

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

其他回答

2020年后面料的答案

将下面的代码粘贴到您的Application类中,并从应用程序onCreate调用方法setCrashlyticsState。您也可以选择将您的测试设备id添加到debugDevices HashSet中,这样您的个人设备就可以被忽略,即使是在发布模式下构建。

请注意。由Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID)返回的设备id;不保证是唯一的或常量(它可以在出厂重置或在根设备上手动更改)。但它应该足够好了。

private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));

private boolean isDebugDevice(String deviceId) {
    return debugDevices.contains(deviceId);
}

private void setCrashlyticsState() {
    @SuppressLint("HardwareIds")
    String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
    if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
        Log.v("DeviceId", deviceId);
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
    }
}

检查BuildConfig。正在查看正确的BuildConfig类。通常会有几个选项,而错误的选项可能会被拖进去。

我知道这是个愚蠢的回答 只需注释掉Fabric。with(this, new Crashlytics());,当你想要发布它时,处理它并取消注释。

另一个我喜欢的简单解决方案,因为它不需要不同的清单文件:

步骤1 -在build.gradle中定义清单占位符

android {
    ...
    buildTypes {
        release {
            manifestPlaceholders = [crashlytics:"true"]
        }
        debug {
            manifestPlaceholders = [crashlytics:"false"]
        }
    }
    ...
}

步骤2 -在AndroidManifest.xml中使用它们

<meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="${crashlytics}" />

注意,你也可以在调试构建中禁用烦人的符号上传:

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
    }
}

把它放到构建中。你的应用模块的Gradle。

如果你想捕获所有的崩溃(用于调试和发布版本),但想在Crashlytics仪表板中分离它们,你可以添加这行代码到build.gradle:

debug {
    versionNameSuffix "-DEBUG"
}

例如,如果你的应用程序的versionName是1.0.0,你的发布版本将被标记为1.0.0,而调试版本将被标记为1.0.0- debug