Как отключить Crashlytics во время разработки

245

Есть ли какой-нибудь простой способ отключить Crashlytics Android SDK во время разработки?

Я не хочу, чтобы это вызывало сбой каждый раз, когда я делаю что-то глупое

С другой стороны, я не хочу комментировать Crashlytics.start()и, возможно, рискну забыть раскомментировать и зафиксировать

Майкл
источник
Вы пытались просто удалить свой ключ API из манифеста, я не помню, если это сбой.
Тиммете
@timmied Вылетает. Также комментируя всю строку в Manifestсбоях приложения, так что это делает вопрос немного более законным.
Майкл

Ответы:

172

Марк из Crashlytics здесь. Вот несколько способов отключить Crashlytics во время сборки отладки!

  1. Используйте другой android: versionString для отладочных и выпускных сборок, а затем отключите отчеты о сбоях на веб-панели Crashlytics для отладочной версии.

  2. Оберните вызов Crashlytics.start () в оператор if, который проверяет флаг отладки. Вы можете использовать либо собственный флаг, либо подход, подобный предложенному здесь: Как проверить, подписан ли APK или «отладочная сборка»?

marcr
источник
5
@marcr Как насчет использования BuildConfig.DEBUG?
Дэннироа
3
@dannyroa BuildConfig.DEBUG - это не стандартный флаг, который работает во всех средах сборки. Я считаю, что он устанавливается последовательно при сборке с Eclipse & ADT, но не в других местах.
марта
11
BuildConfig.DEBUGследует использовать, если вы строите с использованием Gradle. Он всегда будет генерироваться правильно.
Остин Махони
3
@marcr Как насчет последней версии Crashlytics (поскольку она, похоже, объединена с Fabric), библиотека выполняет внутреннюю проверку BuildConfig.DEBUG?
ахы
2
@akhyar Это не проверяется автоматически, я использую: if (! BuildConfig.DEBUG) {Fabric.with (this, new Crashlytics ());}
Бьорн Кешель,
387

Я нашел решение от Crashlytics (с интеграцией Fabric)

Поместите следующий код в класс приложения onCreate()

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

РЕДАКТИРОВАТЬ:

В Crashalitics 2.3 и выше, это устарело. Правильный код:

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

или

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

(скопировано из устаревшего метода Crashlytics отключено () )


EDIT2:

Вы также можете по желанию добавить это в свой buildTypeGradle. Эта команда отключает отправку файла сопоставления сбоев и генерацию идентификатора для каждой сборки, что ускоряет сборку Gradle этих разновидностей. (Он не отключает Crashlytics во время выполнения.) Смотрите ответ Майка Б. здесь.

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}
xialin
источник
2
Это намного приятнее в использовании и остановит сбой вашего приложения, если вы будете делать вызовы Crashlytics в своем коде вне класса Application.
speedynomads
1
В Crashlytics 2.3.0 это устарело :(
Дамиан Вальчак,
1
ext.enableCrashlytics = false у меня тоже не работает с 2.5. На самом деле, это никогда не работало. Еще до Ткани.
Бао-Лонг Нгуен-Тронг
2
У меня есть беспокойство здесь. Это позволит включить ответ и бета-версию? Похоже, это должно быть более правильно: CrashlyticsCore core = new CrashlyticsCore.Builder (). Disabled (BuildConfig.DEBUG) .build (); Fabric.with (это, новые ответы (), новая бета (), новая Crashlytics.Builder (). Core (core) .build ());
Гберо
1
ext.enableCrashlytics = false не вылетает, если вы используете это правильно. Как преодолеть сбой в документации Fabrics: docs.fabric.io/android/crashlytics/build-tools.html .
Фрэнк
46

Выбранный ответ больше не верен. Google изменил интеграцию Crashlytics. Моя текущая версия - 2.9.1и единственное, что мне нужно было сделать, это добавить implementation '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

Затем перейдите в манифесте и добавьте следующий meta-dataтег внутри applicationтега:

<application
        android:name="...>

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

...

</application>

Добавьте к своей Launch-Activity (требуется только один раз, а не к каждой деятельности)

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

Это включит Crashlytics только в версиях выпуска. Будьте внимательны, также проверьте BuildConfig.DEBUG при настройке Crashlytics, например:

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}
Пол Спизбергер
источник
2
Это кажется чистым. Вместо инициализации в основном действии, когда вместо этого в экземпляре приложения?
июля
Они Enable collection for selected users by initializing Crashlytics from one of your app's activitiesуказывают на веб-сайте: но я думаю, что это не сильно изменится, если вы инициализируете Crashlytics в приложении. Вы пробовали это? Если это работает, то я могу добавить это к своему ответу. firebase.google.com/docs/crashlytics/customize-crash-reports
Пол Спизбергер,
2
Я не мог заставить работать другие решения, чтобы отключить сбои во время выполнения. Решение 1 просто сработало - почему я не подумал об этом.
Спасибо за решение. Когда я устанавливаю firebase_crashlytics_collection_enabledзначение false в манифесте, сбой не появляется на консоли (я использую v2.9.9). Поэтому я исправил это, добавив отдельный манифест для отладочной сборки firebase_crashlytics_collection_enabled=falseи trueдля выпуска
Василий Кабунов
30

Если вы используете Gradle, просто добавьте это в аромат:

ext.enableCrashlytics = false
user1998494
источник
1
это только для аромата? как насчет отладки против выпуска? Я попытался отключить для отладки, но все еще отправить сбой
xialin
Я думаю, что это работает только на вкус. ИМО, использующий флаг, на который указывают Остин и Марк, является самым легким.
user1998494
Я нашел решение. но не уверен, что он совместим со старыми Crashlytics. это для новых Crashlytics в Fabric SDK. проверьте мой ответ ниже
xialin
1
Эта команда отключает отправку файла сопоставления сбоев и генерацию идентификатора для каждой сборки, что ускоряет сборку Gradle этих разновидностей. (Он не отключает Crashlytics во время выполнения.) См. Ответ Майка Б. здесь: stackoverflow.com/questions/28339323/…
Aphex
18
Это вызвало аварию ... " This app relies on Crashlytics."
Сакибой
27

Проверьте последний документ. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .

Помимо добавления ext.enableCrashlytics = falseв build.grade вам нужно сделать,

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);
Абхишек Патидар
источник
Я пробовал таким образом, и приложение по-прежнему зависаетThis app relies on Crashlytics. Please sign up for access at
Balflear
Я предполагаю, что вы отсутствуют ext.enableCrashlytics = falseв build.gradle.
Абхишек Патидар
Нет, я добавил тип отладочной сборки в файле build.gradle, он находится в buildTypes -> debug, also i'm applying the plugin via плагине apply: 'io.fabric'`
Balflear
Я не уверен, почему это решение было даже проголосовано 24 раза. This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Сбой
24

Я нашел это самое простое решение:

    release {
        ...
        buildConfigField 'Boolean', 'enableCrashlytics', 'true'
    }
    debug {
        buildConfigField 'Boolean', 'enableCrashlytics', 'false'
    }

Вышеуказанные строки создадут статическое логическое поле, вызываемое enableCrashlyticsв BuildConfigфайле, которое вы можете использовать, чтобы решить, следует ли инициировать Fabricили нет:

    if (BuildConfig.enableCrashlytics)
        Fabric.with(this, new Crashlytics());

ПРИМЕЧАНИЕ. С помощью этого метода Fabrics инициализируется только в сборках выпуска (как указано в приведенном выше коде). Это означает, что вам нужно помещать вызовы статических методов в Crashlyticsклассе в ifблок, который проверяет, была ли инициализирована Fabrics, как показано ниже.

if (Fabric.isInitialized())
    Crashlytics.logException(e);

В противном случае приложение завершится с Must Initialize Fabric before using singleton()ошибкой при тестировании на эмуляторе.

Фахми
источник
17

2019 Ответ

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

Есть 2 возможных способа сделать это.

ОПЦИЯ 1

Это работает, но если вы вызываете какой-либо Crashlyticsметод в отладочных сборках, приложение вылетает .

Приложение / build.gradle

android {
    buildTypes {
        release {
            manifestPlaceholders = [crashlyticsEnabled: true]
        }
        debug {
            manifestPlaceholders = [crashlyticsEnabled: false]
        }

AndroidManifest.xml

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

ВАРИАНТ 2

Альтернатива, если это позволяет вам вызывать Crashlyticsметоды без предварительной проверки BuildConfig.DEBUG. С помощью этой настройки вы можете безопасно вызывать такие методы, как Crashlytics.logException()- они просто ничего не делают в отладочных сборках. Я не вижу, как отчеты загружаются в режиме отладки.

Приложение / build.gradle

android {
    buildTypes {
        release {
            ext.enableCrashlytics = true
        }
        release {
            ext.enableCrashlytics = false
        }

AndroidManifest.xml

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

Приложение onCreate ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)
Альберт Вила Кальво
источник
Я думаю, что android:value="false"должен быть изменен на android:value="${enableCrashlytics}". Не так ли?
JaydeepW
Еще одним преимуществом варианта № 2 является то, что вы начинаете с изначально отключенного сбора аналитики, а затем можете сначала спросить пользователя, можно ли отслеживать использование его приложения (например, GDPR). Тогда вы будете выполнять вызов Fabric.with, только если пользователь согласится на отслеживание.
По Кристиан Хенден
Единственный недостаток опции # 2, это то, что она все еще создает отладочные версии в панели инструментов Firebase, даже если там не будет отображаться сбоев (так как они отключены). Это создает две проблемы - во-первых, сложнее найти версии выпуска; вторая - панель инструментов Firebase показывает только последние 100 версий, что может помешать вам увидеть сбои в некоторых старых версиях. В Fabric Dashboard вы можете отключить определенную версию, это не возможно в Firebase.
Алексей Липов
14

Используйте это в MyApplication#onCreate()

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

РЕДАКТИРОВАТЬ Если вы обновились до Fabric, используйте этот ответ .

Остин Махони
источник
BuildConfig.DEBUG не всегда установлен правильно. Полагаясь на это, чтобы включить / отключить Crashlytics, я столкнулся с множеством проблем при использовании IntelliJ.
Зеб Барнетт
5
Какие инструменты сборки вы используете? Gradle ВСЕГДА установит это значение. Год назад это было проблемой, но новые инструменты сборки стали намного лучше.
Остин Махони
Я на v0.9. + Плагина Gradle для IntelliJ и v1.11 для самого Gradle.
Зеб Барнетт
Я не видел никаких проблем ни в одном из моих приложений. BuildConfigгенерируется задачей Gradle, которая гарантированно выполняется. Я также использую buildConfigFieldдля установки пользовательских полей, и они всегда работают. tools.android.com/recent/androidstudio045released также предлагает использовать BuildConfig.DEBUG.
Остин Махони
Как идеалист, я уверен, что хотел бы использовать его, поскольку это упростит не совсем автоматизированный процесс сборки для небольшой компании, в которой я работаю. Просто мы выпустили в производство сборку, которая зависела от этого флага, и Crashlytics никогда не видел, чтобы она была запущена. После того, как мы вернулись к переключению вручную, Crashlytics увидел это немедленно.
Зеб Барнетт
9

Еще одно простое решение, которое мне нравится, потому что оно не требует других файлов манифеста:

Шаг 1 - определить заполнители манифеста в build.gradle

android {
    ...
    buildTypes {
        release {
            manifestPlaceholders = [crashlytics:"true"]
        }
        debug {
            manifestPlaceholders = [crashlytics:"false"]
        }
    }
    ...
}

Шаг 2 - используйте их в вашем AndroidManifest.xml

<meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="${crashlytics}" />
Арбуз
источник
6

Обратите внимание, что вы также можете отключить надоедливую загрузку символов в отладочной сборке:

def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug"
def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug"
tasks.whenTaskAdded { task ->
    if (crashlyticsUploadStoredDeobsDebug.equals(task.name) ||
            crashlyticsUploadDeobsDebug.equals(task.name)) {

        println "Disabling $task.name."
        task.enabled = false
    }
}

Просто поместите его в build.gradleсвой модуль приложения.

Ариэль Кабиб
источник
6

Если вы хотите перехватить все сбои (для отладочной и выпускной сборок), но хотите разделить их в Crashlytics Dashboard, вы можете добавить эту строку кода в build.gradle:

debug {
    versionNameSuffix "-DEBUG"
}

Например, если versionName вашего приложения - 1.0.0, ваши сборки выпуска будут помечены как 1.0.0, в то время как отладочные сборки будут 1.0.0-DEBUG

Хронос
источник
Это оно? Не нужно делать ароматизаторы?
портфолио
6

Здесь есть много хороших ответов, но для своего тестирования я использую отладочные сборки для внутренних бета-тестов и внепланового тестирования, где журналы сбоев все еще очень полезны, и я все еще хотел бы сообщить о них. Как и OP, все, что я хотел, это отключить их во время активной разработки, где я часто вызываю и быстро устраняю сбои.

Вместо удаления ВСЕХ отладочных сбоев вы можете отключить отчеты, только когда устройство подключено к вашей машине разработки с помощью следующего кода.

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}
Уильям Хендерсон
источник
Это не правильно. Я записываю нефатальные исключения в своем коде, используя Crashlytics.logException(e)этот оператор, и это исключение выдает в сборках отладки, поскольку синглтон Fabric не инициализирован. Если вы используете Crashlytics, то всегда инициализируйте синглтон Fabric. Смотри ответ Фами .
NAXA
5

Проблема в том, что ни одно из решений не работает для последней версии SDK. (Я использую 2.9.0)

Вы не можете отключить его по коду, так как он компилируется в ваш проект и запускается даже до вызова onCreate вашего приложения. Таким образом, другое решение простое - не компилируйте crashlytics, когда это не нужно. Замените вызов 'compile' на 'releaseCompile' в файле build.gradle.

 releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
        transitive = true
    }
Квант
источник
3

На сегодняшний день самая простая версия при использовании Gradle для сборки:

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

Он использует новый встроенный синтаксис от Fabric для Crashlytics и работает автоматически со сборкой Gradle.

Бьорн Кехель
источник
3

Странная проблема, с которой я столкнулся: я следовал за ответом xialin (который также появляется на официальном сайте), и он не работал. Оказалось, что я ссылался BuildConfigв пакете Fabric, который также содержит статическую переменную DEBUG, которая была установлена ​​в false даже в режиме отладки.

Итак, если вы следуете вышеупомянутому решению и по-прежнему получаете отчеты об отладке, убедитесь, что вы ссылаетесь на это:

import com.yourpackagename.BuildConfig;

И не это

import io.fabric.sdk.android.BuildConfig;    
Нерия Нахум
источник
2

Если вас беспокоит BuildConfig.DEBUGнеправильная настройка, используйте ApplicationInfoвместо этого:

boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );
Vaiden
источник
2

Используйте ароматы или соберите конфиги. Используйте отдельный идентификатор сборки для сборки dev, и все ваши сбои будут продолжаться в отдельном приложении. Может пригодиться, если вы поделитесь сборкой с пирами или используете ее без отладчика. Что-то вроде этого -

    productFlavors {
    dev {
        applicationId "io.yourapp.developement"
    }
    staging {
        applicationId "io.yourapp.staging"
    }

    production {
        applicationId "io.yourapp.app"
    }
Рибху
источник
2

Если вы хотите отладочную сборку релиза, вот способ:

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 trueBuildConfig.DEBUG будет инициализироваться с true, поэтому я добавил эту переменную в класс BuildConfig.

Начальная ткань:

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);
М. Реза Насирлоо
источник
Какова цель ext.enableCrashlyticsи ext.alwaysUpdateBuildIdпоскольку они, кажется, нигде не упоминаются. Я что-то упускаю?
июля
@jules Это в документации docs.fabric.io/android/crashlytics/build-tools.html
М. Реза Насирлоо,
BuildConfig.BUILD_TYPE_DEBUG является избыточным, BuildConfig.DEBUG может использоваться для получения того же значения
Антонис Радц
@AntonisRadz Потому что мне нужна была отладочная сборка релиза
М. Реза Насирлоо
1

Мы можем использовать метод ткани isDebuggable ().

import static io.fabric.sdk.android.Fabric.isDebuggable;

if(! isDebuggable()){
    // set Crashlytics ... 
}

Удачного кодирования :)

Садик
источник
1

Вы можете использовать выделенный файл манифеста для режима отладки (работает для меня с Crashlytics 2.9.7):

Создайте файл app/src/debug/AndroidManifest.xmlи добавьте следующее:

<application>

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

</application>

Обратите внимание , что этот элемент мета-данные должны быть введены в отлаживать / AndroidManifest.xml только , а не в очередной AndroidManifest.xml

Используемое CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()мной решение не сработало, и я обнаружил, что crashlytics инициализируется CrashlyticsInitProvider до вызова Application.onCreate () или запуска какого-либо действия, что означает, что ручная инициализация матрицы в приложении или деятельности не имеет эффект, потому что ткань уже инициализирована.

Josias
источник
1

Шаг 1: В build.grade

buildTypes {
        debug {
            debuggable true
            manifestPlaceholders = [enableCrashlytic:false]
        }
        release {
            debuggable false
            manifestPlaceholders = [enableCrashlytic:true]
        }
    }

Шаг 2: в манифесте

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

Шаг 3: В приложении или в первом действии

private void setupCrashReport() {
        if (BuildConfig.DEBUG) return;
        Fabric.with(this, new Crashlytics());
    }

Я не уверен, что шаг 3 необходим, но чтобы версия выпуска работала без сбоев. источник: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting

thanhbinh84
источник
1

Эта работа для меня:

    releaseCompile  'com.crashlytics.sdk.android:crashlytics:2.9.9'

и в buildTypes:

debug {
ext.enableCrashlytics = false
}
Амирхосейн Хейдари
источник
Как насчет использования Crashlytics в коде? Это даст вам ошибки компиляции.
Micer
1

Существует два варианта отключения Firebase Crashlytics для следующей версии com.google.firebase: firebase-crashlytics: 17.0.0:

  1. Добавить метатег в манифест приложения

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

ИЛИ

  1. Сконфигурируйте непосредственно в приложении (имейте в виду, когда установлено значение false, новое значение не применяется до следующего запуска приложения)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)

Виктор Иванов
источник
0

Другой способ, если вы хотите сделать это только в своей среде IDE, - выйти из плагина. Очевидно, он прекратит отправку отчетов, пока вы создаете сборки без повторного входа в систему.

neteinstein
источник
0
  1. Добавьте это в build.gradle вашего приложения:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. Отключите комплект Crashlytics во время выполнения. В противном случае комплект Crashlytics выдаст ошибку:

    // Set up Crashlytics, disabled for debug builds
    // Add These lines in your app Application class onCreate method
    
    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);
  3. В AndroidManifest.xml добавьте

    <meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />
100rbh
источник
0

2020 Post Fabric Ответ

Вставьте приведенный ниже код в ваш класс Application и вызовите метод setCrashlyticsStateиз вашего приложения onCreate. При желании вы можете добавить свои идентификаторы тестового устройства кdebugDevices HashSet, чтобы ваши личные устройства можно было игнорировать даже при сборке в режиме выпуска.

Заметка. Идентификатор устройства, возвращаемый пользователем Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);, не гарантируется быть уникальным или постоянным (он может измениться при сбросе настроек или вручную на устройстве с правами root). Но это должно быть достаточно хорошо.

private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));

private boolean isDebugDevice(String deviceId) {
    return debugDevices.contains(deviceId);
}

private void setCrashlyticsState() {
    @SuppressLint("HardwareIds")
    String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
    if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
        Log.v("DeviceId", deviceId);
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
    }
}

Проверьте это BuildConfig. смотрит на правильный класс BuildConfig. Часто есть несколько вариантов, и неправильный может быть втянут.

Уилл Колдервуд
источник
-8

Это глупый ответ, я знаю.
Просто закомментируйте Fabric.with(this, new Crashlytics());, поработайте над этим и раскомментируйте его, когда захотите выпустить.

Tej42
источник