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

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

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


当前回答

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

debug {
    versionNameSuffix "-DEBUG"
}

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

其他回答

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

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);

在MyApplication#onCreate()中使用

if (!BuildConfig.DEBUG) Crashlytics.start(this);

编辑 如果您升级到Fabric,请使用这个答案。

所选的答案不再正确。谷歌改变了Crashlytics的整合。我目前的版本是2.9.1,我唯一要做的是,添加实现'com.crashlytics.sdk.android:crashlytics:2.9.1'到我的Gradle文件。没有更多的事情需要,很好,但这意味着Crashlytics一直在运行。

解决方案1

只在发布版本编译Crashlytics:

dependencies {
   ...
   releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}

解决方案2

如果你想额外配置Crashlytics,那么解决方案1是行不通的,因为在调试版本中找不到Crashlytics类。因此,将Gradle实现更改为:

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version

然后转到你的Manifest,在应用程序标签中添加以下元数据标签:

<application
        android:name="...>

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

...

</application>

添加到您的启动活动(只需要一次,而不是每个活动)

if (!BuildConfig.DEBUG) { // only enable bug tracking in release version
   Fabric.with(this, new Crashlytics());
}

这只会在发布版本中启用Crashlytics。注意,还要检查BuildConfig。调试当你配置Crashlytics,例如:

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}

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

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

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

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

import com.yourpackagename.BuildConfig;

而不是这个:

import io.fabric.sdk.android.BuildConfig;