Ткань Crashlytics с Firebase не может быть отключена для сборки DEBUG

У меня есть приложение, которое использует Crashlytics Fabric через Firebase. Первое, что было выполнено в моих приложениях onCreate

CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
    .disabled(BuildConfig.DEBUG)
    .build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());

Тем не менее, сбои представлены в режиме DEBUG == true.

Я использую следующие версии

в моем classpath "io.fabric.tools:gradle:1.25.1" class classpath "io.fabric.tools:gradle:1.25.1"

в моей реализации app/build.gradle implementation "com.crashlytics.sdk.android:crashlytics:2.9.1"

К сожалению, аварии все еще сообщаются. Любые идеи, что я делаю неправильно?

Ответ 1

В документации Firebase Crashlytics объясняется, что после включения отчетности в сеансе приложения ее нельзя отключить.

По умолчанию отчетность Crashlytics включена в ContentProvider имени CrashlyticsInitProvider, который выполняется до вашего Application создается экземпляр. 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. Если сообщение отсутствует, вы успешно настроили метаданные для отключения отчетов о сбоях.

Если метаданные отсутствуют или имеют значение true, вы не можете отключить создание отчетов в своем коде с помощью вызова Fabric.with(...).

В комментарии к другому ответу вы указываете, что пытались отключить создание отчетов с использованием метаданных и не смогли это сделать. Проверьте на опечатку и убедитесь, что объявление правильно размещено в элементе <application>. В моих тестах я могу отключить создание отчетов с использованием метаданных, а затем включить их во время выполнения.

Ответ 2

Правильные ответы уже были опубликованы Бобом Снайдером и niqueco, однако кажется довольно утомительным изменять значение метаданных каждый раз, когда вы создаете актуальную версию APK, поэтому здесь представлено решение, использующее так называемый manifestPlaceholder и автоматически изменяющее значение на true или false в зависимости от buildType.

Добавьте следующее в ваши приложения 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>

Вы можете проверить текущее значение, нажав на вкладку " Merged Manifest ", как только откроете AndroidManifest.xml. Вы должны увидеть что-то вроде этого:

Merged manifest meta-data value for crash reporting

Ответ 3

Я наконец нашел проблему. Crashlytics инициализируется поставщиком контента, поэтому к тому времени, когда вы попытаетесь отключить приложение onCreate() это слишком поздно. Просматривая декомпилированный код, я видел, что вы можете отключить эту инициализацию, добавив метаданные в элемент <application> в манифесте.

Итак, что я делаю, это... Я добавил это в 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>

Я также отключил Crashlytics в файле сборки градиента модуля приложения, добавив:

    debug {
        ext.enableCrashlytics = false
    }

К моему удивлению, мне не нужно было делать Fabric.with(...). Выше было достаточно.

Он отлично работает: никаких отчетов.

Ответ 5

Получите эту информацию из документации для Android Настройте свои отчеты о сбоях Firebase

Включить поддержку отчетов: по умолчанию Firebase Crashlytics автоматически собирает отчеты о сбоях для всех пользователей вашего приложения. Чтобы предоставить пользователям больший контроль над отправляемыми данными, вы можете вместо этого включить отчет о подписке.

Для этого вы должны отключить автоматический сбор и инициализировать Crashlytics только для подписчиков.

Отключите автоматический сбор мета-данных в вашем файле AndroidManifest.xml:

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

Включите сбор для выбранных пользователей, инициализировав Crashlytics из одного из действий вашего приложения:

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

Ответ 6

Если вы хотите полностью отключить отчеты Firebase Crash, а также не нужно добавлять

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>