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

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

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


当前回答

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

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

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

快乐编码:)

其他回答

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

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

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

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

上面的代码行将在BuildConfig文件中创建一个名为enableCrashlytics的静态布尔字段,你可以用它来决定是否初始化Fabric:

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

注意:使用这种方法,fabric只在发布版本中初始化(如上面的代码所示)。这意味着你需要在一个if块中调用Crashlytics类中的静态方法,该块检查fabric是否已经初始化,如下所示。

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

否则,当在模拟器上测试时,在使用singleton()错误之前,应用程序将崩溃。

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

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

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

它使用来自Fabric的Crashlytics的内置语法,并自动与Gradle构建一起工作。

如果你想要一个可调试的版本,方法如下:

buildTypes {
    release {
        signingConfig signingConfigs.config
        debuggable true //-> debuggable release build
        minifyEnabled true
        multiDexEnabled false
        ext.enableCrashlytics = true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'false'
    }
    debug {
        minifyEnabled false
        multiDexEnabled true
        ext.enableCrashlytics = false
        ext.alwaysUpdateBuildId = false
        // Disable fabric build ID generation for debug builds
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'true'
    }
}

当你将debuggable设置为true时,你的BuildConfig。DEBUG将初始化为true,这就是为什么我在BuildConfig类中添加了这个变量。

Init织物:

Crashlytics crashlytics = new Crashlytics.Builder()
            // disable crash reporting in debug build types with custom build type variable
            .core(new CrashlyticsCore.Builder().disabled(BuildConfig.BUILD_TYPE_DEBUG).build())
            .build();

    final Fabric fabric = new Fabric.Builder(this)
            .kits(crashlytics)
            //enable debugging with debuggable flag in build type 
            .debuggable(BuildConfig.DEBUG)
            .build();

    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(fabric);