对于DEBUG版本,不能禁用使用Firebase的Fabric&#Crashlytics

时间:2018-03-28 07:44:37

标签: android firebase crashlytics google-fabric crashlytics-android

我的应用程序通过Firebase使用Fabric的Crashlytics。 以下是我的Applications onCreate

中执行的第一件事
CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
    .disabled(BuildConfig.DEBUG)
    .build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());

尽管如此,崩溃仍以DEBUG == true模式提交。

我使用以下版本

在我的build.gradle中 classpath "io.fabric.tools:gradle:1.25.1"

在我的app / build.gradle中 implementation "com.crashlytics.sdk.android:crashlytics:2.9.1"

不幸的是,崩溃仍然有报道。任何想法,我做错了什么?

7 个答案:

答案 0 :(得分:53)

正确的答案已经由Bob Snyderniqueco发布,但是每次构建实际的发行版APK时都要更改元数据值似乎有些繁琐,因此,这是一种使用所谓的解决方案manifestPlaceholder,然后根据true将值自动更改为falsebuildType

将以下内容添加到您的应用build.gradle

android {

    // ...

    buildTypes {
        debug {
            manifestPlaceholders = [enableCrashReporting:"false"]
        }
        release {
            manifestPlaceholders = [enableCrashReporting:"true"]
        }
    }

}

这就是您的AndroidManifest.xml

<manifest ... >

    <application ...>

        // ...

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

    </application>

</manifest>

打开AndroidManifest.xml后,您可以通过单击Merged Manifest选项卡来验证当前值。您应该会看到类似这样的内容:

Merged manifest meta-data value for crash reporting

答案 1 :(得分:18)

Firebase Crashlytics documentation解释说,一旦在应用会话中启用了报告,就无法将其禁用。

默认情况下,在创建ContentProvider实例之前执行的名为 CrashlyticsInitProvider Application中启用Crashlytics报告。 CrashlyticsInitProvider 根据元数据值firebase_crashlytics_collection_enabled启用或禁用报告,默认情况下为true。

如果您希望报告已停用,那么明确的元数据存在并设置为false至关重要:

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

在应用程序初始化期间查看logcat中的消息:

CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful

如果消息存在,则firebase_crashlytics_collection_enabled为真。如果消息不存在,则表示您已成功设置元数据以禁用崩溃报告。

如果元数据丢失或设置为true,则无法通过调用Fabric.with(...)来禁用代码中的报告。

在对其他答案的评论中,您表明您尝试使用元数据禁用报告但未成功。检查拼写错误并确保声明正确放置在<application>元素中。在我的测试中,我能够使用元数据禁用报告,然后在运行时启用。

答案 2 :(得分:8)

我终于找到了这个问题。 Crashlytics是从内容提供商初始化的,因此当您尝试从应用程序的onCreate()禁用时,为时已晚。通过反编译的代码我已经看到你可以通过向&lt; application&gt;添加元数据来禁用该初始化。清单中的元素。

所以,我所做的就是这个...我已将此添加到app / src / debug / AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="<your app package>">

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

</manifest>

我还通过添加:

在app模块gradle构建文件中禁用了Crashlytics
    debug {
        ext.enableCrashlytics = false
    }

令我惊讶的是,我不需要做Fabric.with(...)事。以上就够了。

工作正常:没有报道。

答案 3 :(得分:4)

我认为,如果您切换到Firebase crashlytics并删除了fabric crashlytics,也可以从代码中实现: link to firebase doc

因此在您的应用程序类的onCreate中:

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);

答案 4 :(得分:3)

您需要停用app的build.gradle的CrashlyticsDisable Crashlytics for Debug Builds

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

答案 5 :(得分:1)

从android文档获取了此信息 Customize your Firebase Crash Reports

启用选择加入报告: 默认情况下,Firebase Crashlytics自动为您所有应用程序的用户收集崩溃报告。为了使用户能够更好地控制他们发送的数据,您可以改为启用选择加入报告。

要做到这一点,您必须禁用自动收集功能,并仅对选择加入的用户初始化Crashlytics。

在您的AndroidManifest.xml文件中使用元数据标签关闭自动收集:

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

通过初始化应用活动之一的Crashlytics,为选定的用户启用收集功能:

Fabric.with(this, new Crashlytics());

答案 6 :(得分:0)

如果您想完全禁用Firebase崩溃报告并且也不必添加

com.crashlytics.sdk.android:crashlytics:2.9.1

依赖性,然后按照@reVerse的回答进行操作,并将其添加到您的AndroidManifest.xml中。

<application ...>

    // ...

    <meta-data 
            android:name="firebase_crashlytics_collection_enabled" 
            android:value="${enableCrashReporting}" />
    <meta-data
            android:name="firebase_analytics_collection_deactivated"
            android:value="true"/>
</application>