Crashlytics Fabric с 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 режиме.

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

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

в моем приложении / build.gradle implementation "com.crashlytics.sdk.android:crashlytics:2.9.1"

К сожалению, о сбоях до сих пор сообщают. Есть идеи, что я делаю не так?


person peshkira    schedule 28.03.2018    source источник
comment
stackoverflow.com/a/37396946/7505436   -  person vm345    schedule 28.03.2018
comment
Спасибо, но я не использую firebase-crash, поскольку сейчас он устарел. Ваш предложенный ответ использует это. Я использую crashlytics, он просто связан с консолью firebase.   -  person peshkira    schedule 28.03.2018


Ответы (7)


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

По умолчанию отчеты Crashlytics включены в ContentProvider с именем CrashlyticsInitProvider, который выполняется до создания вашего Application экземпляра. CrashlyticsInitProvider включает или отключает создание отчетов на основе значения метаданных firebase_crashlytics_collection_enabled, которое по умолчанию истинно.

Если вы хотите отключить отчеты, важно, чтобы метаданные манифеста присутствовали и были установлены на 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>. В моих тестах я могу отключить создание отчетов с использованием метаданных, а затем включить их во время выполнения.

person Bob Snyder    schedule 29.03.2018
comment
Спасибо, попробую еще раз. - person peshkira; 29.03.2018
comment
Это было несколько вопросов, которые вместе привели к проблеме. Ваш ответ помог мне решить их, поэтому я принимаю его. Спасибо! - person peshkira; 30.03.2018
comment
У меня такая же проблема, и этого решения кажется недостаточно. Я добавил метаданные, у меня НЕТ успешной инициализации CrashlyticsInitProvider в журналах, я четырехкратно проверил, что Fabric.with(this, new Crashlytics()); вызывается только в неотладочных сборках, у меня версия SDK 2.9.3, и я все еще получаю сбой отчеты. Пожалуйста, помогите - если больше нечего делать, я попробую решение на основе градиента, упомянутое ниже. - person Ovidiu; 28.06.2018
comment
Я пробовал это, к сожалению, больше не работает. CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful больше не отображается в журналах сборок DEBUG, но сбои по-прежнему отправляются в мою консоль. firebase_core_version = '16.0.5' & firebase_crashlytics_version = '2.9.6' - person b4kancs; 02.12.2018
comment
из последних Crashlytics он распечатывает I/CrashlyticsCore: Initializing Crashlytics 2.6.6.29 - person Kirill Karmazin; 07.02.2019

Правильные ответы опубликованы Бобом Снайдером и 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. Вы должны увидеть что-то вроде этого:

Объединенное значение метаданных манифеста для отчетов о сбоях

person reVerse    schedule 02.09.2018
comment
Он связывает другие ответы, объясняющие рассуждения, И он также предоставляет чистое РЕШЕНИЕ. - person dknchris; 12.11.2018
comment
Лучший и более общий подход. Спасибо :) - person Pioneer; 12.01.2019
comment
Да, именно так я и делаю. Я поддержал ваш ответ. Однако я оставляю принятый ответ как есть, потому что он указал мне правильное решение. - person peshkira; 21.01.2019
comment
Хорошее решение! - person Nabdreas; 27.11.2019

Я наконец нашел проблему. 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 в файле сборки gradle модуля приложения, добавив:

    debug {
        ext.enableCrashlytics = false
    }

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

Работает нормально: отчетов нет.

person niqueco    schedule 29.03.2018
comment
Спасибо, попробую еще раз. - person peshkira; 29.03.2018
comment
ext.enableCrashlytics = false Эта строка вызывает сбой моего приложения с сообщением ниже - это приложение полагается на Crashlytics. Зарегистрируйтесь для доступа на странице fabric.io/sign_up, - person Ajith Memana; 17.10.2018
comment
@AjithMemana Это работает для старых Fabric Crashlytics. Не в Fabric's Crashlytics с Firebase, вот в чем вопрос. Для этого посмотрите на принятый ответ - person David; 26.05.2020

Я думаю, что это можно сделать и из кода, если вы перешли на аварийную настройку firebase и удалили аварийную настройку ткани: ссылка на документ firebase

Итак, в onCreate вашего класса приложения:

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);
person Quentin G.    schedule 10.04.2020
comment
Невозможно увидеть сбои для разработчика. Как включить вылеты - person sejn; 03.09.2020

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

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

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

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

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

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

Fabric.with(this, new Crashlytics());
person K Pradeep Kumar Reddy    schedule 17.12.2018

Вам необходимо отключить Crashlytics файла build.gradle приложения. Отключить Crashlytics для отладочных сборок

android {
    buildTypes {
        debug {
          // Disable fabric build ID generation for debug builds
          ext.enableCrashlytics = false
          ...  
person vm345    schedule 28.03.2018
comment
Еще раз спасибо, но мне нужно сделать это во время выполнения по нескольким причинам. Есть идеи, почему .disabled не работает? Он отлично работает в других приложениях, к которым у меня не подключен Firebase. Кажется, это ошибка firebase, не так ли? - person peshkira; 28.03.2018
comment
Вам нужно сделать ext.enableCrashlytics = false в своем градиенте и CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder() .disabled(BuildConfig.DEBUG) .build(); Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build()); в своем классе приложения - person vm345; 28.03.2018
comment
К сожалению, нет. Он по-прежнему развертывает сбои, произведенные в режиме отладки. Я также попытался отключить его в манифесте с помощью firebase_crashlytics_collection_enabled - person peshkira; 28.03.2018
comment
@peshkira Вы наконец нашли решение, которое сработало для вас? - person Shobhit Puri; 06.06.2018
comment
@Shobhit Puri да. Взгляните на принятый ответ - person peshkira; 06.06.2018
comment
Спасибо @peshkira. Я прошел через это. Однако мне пришлось сделать дополнительную проверку if (!BuildConfig.DEGUG) {Fabric.with()}. Сначала я подумал из документации, что достаточно просто записи в манифесте. - person Shobhit Puri; 06.06.2018
comment
Это работает для старых Fabric Crashlytics. Не в Fabric's Crashlytics с Firebase, вот в чем вопрос. - person David; 26.05.2020

Если вы хотите полностью отключить отчеты о сбоях 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>

person Phileo99    schedule 20.07.2019