Android:禁用crashlytics进行调试构建

时间:2018-08-15 06:55:48

标签: android firebase crashlytics crashlytics-android

我只想禁用crashlytics进行调试。

因此,我按照他们的正式文件中的说明进行操作。 https://docs.fabric.io/android/crashlytics/build-tools.html

根据该文档,我必须执行以下操作,因此我做到了。 首先,我在下面添加了

android {
buildTypes {
    debug {
      // Disable fabric build ID generation for debug builds
      ext.enableCrashlytics = false
      ...

然后我将以下内容添加到我的Application类中。

// Set up Crashlytics, disabled for debug builds
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();

// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);

但是我仍然收到此错误。

     Caused by: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,

有什么我想念的吗?

我检查了我尝试构建的构建类型,并且在没有此配置的情况下运行良好。

我的crashlytics版本是2.9.4。

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.4'

谢谢!

4 个答案:

答案 0 :(得分:1)

要在应用程序启动前禁用Firebase,您需要将以下代码添加到AndroidManifest.xml:

<application
    ... >

    ...

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

</application>

表达式$ {crashlyticsCollectionEnabled}被称为清单占位符,其值来自主模块的构建。 gradle文件:

android {

...

buildTypes {
    debug {
        manifestPlaceholders = [crashlyticsCollectionEnabled:"false"]
        ...
    }

    release {
        manifestPlaceholders = [crashlyticsCollectionEnabled:"true"]
        ...
    }
}

}

答案 1 :(得分:0)

好像您缺少 API密钥,如果是,则在应用程序标记下添加清单文件,如下所示

<application
      .........
      .........
      <meta-data
          android:name="io.fabric.ApiKey"
          android:value="<FABRIC_API_KEY>"
      />
</application>

答案 2 :(得分:0)

好吧,现在我看一下您的代码,看来确实比我的方法有更好的解决方案,但是我使用的方法效果很好,所以无论如何我都会分享它(我正在使用只有两种构建类型:DEBUG和RELEASE,并且没有变体,所以对我来说足够了。当MyApp#onCreate

时,我根本没有完全初始化Crashlytics(在BuildConfig.DEBUG == True中)
public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

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

但是我确信其他人会提出更好的解决方案。

答案 3 :(得分:0)

在您的应用程序级别build.gradle中添加以下内容:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

dependencies {
    compile('com.crashlytics.sdk.android:crashlytics:KIT_VERSION@aar') {
        transitive = true;
    }
}



android {
    buildTypes {
            release {
                shrinkResources true
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            debug {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            }

        }
    productFlavors {
        production {
            buildConfigField 'boolean', 'IS_FABRIC_DISABLED', 'false'
        }
        fabricOn {
            buildConfigField 'boolean', 'IS_FABRIC_DISABLED', 'false'   
        }
        fabricOff {
            buildConfigField 'boolean', 'IS_FABRIC_DISABLED', 'true'           
        }
    }
}

在您的应用程序类的onCreate方法中添加以下行:(注意:这是在kotlin中将其转换为Java)

val core = CrashlyticsCore.Builder().disabled(BuildConfig.IS_FABRIC_DISABLED).build()
Fabric.with(this, Crashlytics.Builder().core(core).build())

添加此选项后,您将在左侧的Build Variants with diffrent选项中看到。 (这里我没有应用面料选项,它显示了默认选项)

enter image description here