Як відключити Crashlytics під час розробки


245

Чи є простий спосіб відключити Crashlytics Android SDK під час розробки?

Я не хочу, щоб він подавав аварію кожного разу, коли я роблю щось дурне

З іншого боку, я не хочу коментувати, Crashlytics.start()і, можливо, ризикую забути розблокувати його та зробити


Ви спробували просто видалити ключ api з маніфесту, я не пам'ятаю, чи це збій.
Timmetje

@timmied Це збій. Також коментуючи весь рядок у Manifestзбої програми, так що це робить питання трохи більш законним.
Майкл

Відповіді:


172

Марк з Crashlytics тут. Ось кілька способів відключити Crashlytics, коли ви робите налагодження!

  1. Використовуйте інший android: versionString для налагодження та випуску версій, а потім відключіть звіт про аварійне завершення з веб-панелі інструментів Crashlytics для налагоджувальної версії.

  2. Оберніть виклик на Crashlytics.start () у операторі if, який перевіряє прапор налагодження. Ви можете використовувати або спеціальний прапор, або такий підхід, як запропонований тут: Як перевірити, чи APK підписаний чи "налагодження"?


5
@marcr Як щодо використання BuildConfig.DEBUG?
dannyroa

3
@dannyroa BuildConfig.DEBUG - це не стандартний прапор, який працює у всіх середовищах побудови. Я вважаю, що це встановлюється послідовно при будівництві за допомогою Eclipse & ADT, але не в інших місцях.
marcr

11
BuildConfig.DEBUGслід використовувати, якщо ви будуєте за допомогою Gradle. Це завжди буде генеруватися належним чином.
Остін Махоні

3
@marcr, як щодо останньої версії крахлітиків (як здається об'єднаних з Fabric), чи робить бібліотека внутрішню перевірку BuildConfig.DEBUG?
Акхі

2
@akhyar Це не перевіряється автоматично, я використовую: if (! BuildConfig.DEBUG) {Fabric.with (це нові Crashlytics ());}
Бьорн Кехель

387

Я знайшов рішення від Crashlytics (з інтеграцією тканин)

Введіть наступний код у ваш клас додатків 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
    }
}

2
Це набагато приємніше використовувати і зупинить ваш додаток, якщо ви здійснюватимете дзвінки Crashlytics у своєму коді поза вашим класом програми.
speedynomads

1
Це застаріло в програмі Crashlytics 2.3.0 :(
Damian Walczak

1
ext.enableCrashlytics = false не працює для мене ні з 2.5. Власне, це ніколи не працювало. Ще до Тканини.
Бао-Лонг Нгуен-Тронг

2
У мене тут є стурбованість. Чи це дозволить відповісти та бета-версію? Схоже, це має бути правильніше: CrashlyticsCore core = новий CrashlyticsCore.Builder (). Інвалід (BuildConfig.DEBUG) .build (); Fabric.with (це, нові відповіді (), нова Beta (), нова Crashlytics.Builder (). Core (core) .build ());
gbero

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

Потім перейдіть до свого Manifest і додайте до meta-dataтегу наступний applicationтег:

<application
        android:name="...>

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

...

</application>

Додайте до своєї стартової активності (потрібна лише разова, не кожна діяльність)

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
Це здається чистим. Замість ініціалізації в основній діяльності, коли не в екземплярі Application замість цього?
Жюль

Вони заявляють на веб-сайті: 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_enabledfalse в маніфесті, збій не з’являється на консолі (я використовую v2.9.9). Тож я виправив це, додавши окремий маніфест для налагодження налагодження за допомогою firebase_crashlytics_collection_enabled=falseта trueдля випуску
Василь Кабунов,

30

Якщо ви використовуєте Gradle, просто додайте це до аромату:

ext.enableCrashlytics = false

1
це тільки для аромату? як щодо налагодження проти випуску? Я намагався відключити налагодження, але все-таки
надійшов

Я думаю, що це працює лише на аромати. ІМО із застосуванням прапора Остіна та Маркча - найпростіший.
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 додатку застосувати: '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());

ПРИМІТКА. За допомогою цього методу тканини ініціалізуються лише у складах випусків (як показано у наведеному вище коді). Це означає, що потрібно класти виклики методам статики в Crashlyticsкласі в ifблок, який перевіряє, чи було ініціалізовано тканини, як показано нижче.

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

Інакше додаток стане Must Initialize Fabric before using singleton()помилкою при тестуванні на емуляторі.


17

Відповідь 2019 року

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

Є два можливі способи зробити це.

ВАРІАНТ 1

Це працює, але якщо ви викликаєте будь-який Crashlyticsметод на налагодженнях, додаток вийде з ладу .

app / 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()- вони просто не роблять нічого в налагодженнях. Я не бачу, щоб звіти завантажувались у налагодження.

app / 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 ви могли відключити певну версію, на інформаційній панелі Firebase це неможливо .
Олексій Липов

14

Використовуйте це в MyApplication#onCreate()

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

EDIT Якщо ви оновили до Тканини, використовуйте замість цього відповідь .


BuildConfig.DEBUG не завжди налаштовано належним чином. Покладаючись на це, щоб увімкнути / відключити Crashlytics викликало у мене досить багато проблем під час використання IntelliJ.
Зеб Барнетт

5
Які інструменти побудови ви використовуєте? Градле ЗАВЖДИ встановить це значення. Це була проблема рік тому, але нові інструменти для збірки набагато краще.
Austyn Mahoney

Я перебуваю на v0.9. + Плагіна Gradle для IntelliJ і v1.11 для самого Gradle.
Зеб Барнетт

У жодному із моїх додатків я не бачив жодних проблем. BuildConfigпороджується завданням Gradle, яке гарантовано виконується. Я також використовую buildConfigFieldдля встановлення користувальницьких полів, які завжди працюють. tools.android.com/recent/androidstudio045випущений також пропонує використовувати BuildConfig.DEBUG.
Austyn Mahoney

Як ідеаліст, я впевнений, що хотів би мати можливість використовувати його, оскільки це спростить не зовсім автоматизований процес збирання для невеликої компанії, в якій я працюю. Просто ми випустили у виробництво збірку, яка залежала від цього прапора, і 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, ви можете додати цей рядок коду до build.gradle:

debug {
    versionNameSuffix "-DEBUG"
}

Наприклад, якщо версіяName вашого додатка - 1.0.0, версії версій буде позначені як 1.0.0, а налагодження - 1.0.0-DEBUG


Це воно? Не потрібно робити ароматизатори?
портфоліобудівник

6

Тут є багато хороших відповідей, але для мого тестування я використовую налагодження налагодження для внутрішніх бета-версій та тестування поза лабораторією, де журнали аварійних ситуацій все ще дуже корисні, і я все одно хотів би повідомити про них. Як і в ОП, все, що я хотів, було відключити їх під час активного розвитку, де я часто спричиняю і швидко вирішую збої.

Замість того, щоб видаляти ВСІ помилки налагодження, ви можете вимкнути звіти лише тоді, коли пристрій підключено до вашої машини розвитку із наступним кодом.

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}

Це неправильно. Я реєструю нефатальні винятки в своєму коді, використовуючи Crashlytics.logException(e)цей вислів, викидає винятки в налагодженнях, оскільки однократне видання Fabric не ініціалізується. Якщо ви використовуєте Crashlytics, то завжди ініціалізуйте Fabric Singleton. Дивіться відповідь фахмі .
naXa

5

Проблема полягає в тому, що жодне з рішень не працює для останніх sdk аварійних ситуацій. (Я використовую 2.9.0)

Ви не можете вимкнути його за кодом, оскільки він збирається у ваш проект і працює перед тим, як виклик onCreate вашої програми. Тож інше рішення просте - не збирайте крашмітики, коли це не потрібно. Замініть виклик "компілювати" на "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 for Crashlytics і автоматично працює зі збіркою Gradle.


3

Дивна проблема, з якою я зіткнувся: я переслідував відповідь xialin (який також з'являється на офіційному веб-сайті), і це не спрацювало. Виявилося, що я посилався BuildConfigна пакет Fabric, який також містить статичну змінну DEBUG, яка була встановлена ​​на помилку навіть у режимі налагодження.

Отже, якщо ви дотримуєтесь вищезгаданого рішення і все ще отримуєте звіти про налагодження, переконайтеся, що ви посилаєтесь на це:

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 );

2

Використовуйте ароматизатори або створюйте конфігурації. Використовуйте окремий ідентифікатор збірки для складання розробників, і всі ваші збої продовжуватимуть переходити до окремої програми. Може стати в нагоді у випадку спільного використання збірки з однолітками або використання її без налагоджувача. Щось на зразок цього -

    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.

Тканина Init:

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оскільки вони, здається, ніде не посилаються. Я щось пропускаю?
Жюль


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(), не працювало для мене, і я з'ясував, що аварійні ініціалізації ініціалізуються CrashlyticsInitProvider перед викликом Application.onCreate () або запускається будь-яка діяльність, що означає, що тканина в додатку або активність вручну ініціалізує ефект, оскільки тканина вже ініціалізована.


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


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. Додайте метатег до програми Manifest

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

АБО

  1. Налаштуйте безпосередньо в додатку (майте на увазі, коли встановлено значення false, нове значення не застосовується до наступного запуску програми)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)


0

Ще один спосіб, якщо ви хочете це зробити лише у своїй IDE - це вихід із плагіна. Мабуть, він перестане надсилати звіти, коли ви створюєте збірки, не входячи знову.


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" />

0

2020 відповідь тканини відповідь

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

Примітка. Ідентифікатор пристрою, який повертається, Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);не гарантується, що він буде унікальним або постійним (він може змінюватися на заводських скиданнях або вручну на вкоріненому пристрої). Але це повинно бути досить добре.

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());, працюйте над цим і коментуйте його, коли ви хочете звільнити його.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.