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

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

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


当前回答

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类。通常会有几个选项,而错误的选项可能会被拖进去。

其他回答

如果你担心BuildConfig。调试没有正确设置,请使用ApplicationInfo代替:

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

根据谷歌使用此代码禁用Crashlytics,它也将改善构建过程。

reference-https: / / developer.android.com/studio/build/optimize-your-build

我遇到了一个奇怪的问题:我按照夏林的答案(也出现在官网上)做了,但没有成功。原来我引用了Fabric包中的BuildConfig,其中还包含一个静态DEBUG变量,即使在调试模式下也被设置为false。

所以,如果你遵循前面提到的解决方案,你仍然得到调试报告,确保你引用了这个:

import com.yourpackagename.BuildConfig;

而不是这个:

import io.fabric.sdk.android.BuildConfig;    

如果你只想在你的IDE上做这件事,另一种方法是注销插件。显然,它将停止发送报告,而您正在生成构建,无需再次登录。

我们可以使用fabric的isDebuggable()方法。

import static io.fabric.sdk.android.Fabric.isDebuggable;

if(! isDebuggable()){
    // set Crashlytics ... 
}

快乐编码:)