Есть ли какой-нибудь простой способ отключить Crashlytics Android SDK во время разработки?
Я не хочу, чтобы это вызывало сбой каждый раз, когда я делаю что-то глупое
С другой стороны, я не хочу комментировать Crashlytics.start()
и, возможно, рискну забыть раскомментировать и зафиксировать
Manifest
сбоях приложения, так что это делает вопрос немного более законным.Ответы:
Марк из Crashlytics здесь. Вот несколько способов отключить Crashlytics во время сборки отладки!
Используйте другой android: versionString для отладочных и выпускных сборок, а затем отключите отчеты о сбоях на веб-панели Crashlytics для отладочной версии.
Оберните вызов Crashlytics.start () в оператор if, который проверяет флаг отладки. Вы можете использовать либо собственный флаг, либо подход, подобный предложенному здесь: Как проверить, подписан ли APK или «отладочная сборка»?
источник
BuildConfig.DEBUG
следует использовать, если вы строите с использованием Gradle. Он всегда будет генерироваться правильно.BuildConfig.DEBUG
?Я нашел решение от Crashlytics (с интеграцией Fabric)
Поместите следующий код в класс приложения
onCreate()
РЕДАКТИРОВАТЬ:
В Crashalitics 2.3 и выше, это устарело. Правильный код:
или
(скопировано из устаревшего метода Crashlytics отключено () )
EDIT2:
Вы также можете по желанию добавить это в свой
buildType
Gradle. Эта команда отключает отправку файла сопоставления сбоев и генерацию идентификатора для каждой сборки, что ускоряет сборку Gradle этих разновидностей. (Он не отключает Crashlytics во время выполнения.) Смотрите ответ Майка Б. здесь.источник
ext.enableCrashlytics = false
у меня тоже не работает с 2.5. На самом деле, это никогда не работало. Еще до Ткани.Выбранный ответ больше не верен. Google изменил интеграцию Crashlytics. Моя текущая версия -
2.9.1
и единственное, что мне нужно было сделать, это добавитьimplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'
в мой файл Gradle. Больше ничего не требуется, приятно, но это означает, что Crashlytics всегда работает.Решение 1
Скомпилируйте Crashlytics только в версии выпуска:
Решение 2
Если вы хотите дополнительно настроить Crashlytics, тогда Решение 1 не работает, так как классы Crashlytics не будут найдены в Отладочных сборках. Так что измените реализацию Gradle обратно на:
Затем перейдите в манифесте и добавьте следующий
meta-data
тег внутриapplication
тега:Добавьте к своей Launch-Activity (требуется только один раз, а не к каждой деятельности)
Это включит Crashlytics только в версиях выпуска. Будьте внимательны, также проверьте BuildConfig.DEBUG при настройке Crashlytics, например:
источник
Enable collection for selected users by initializing Crashlytics from one of your app's activities
указывают на веб-сайте: но я думаю, что это не сильно изменится, если вы инициализируете Crashlytics в приложении. Вы пробовали это? Если это работает, то я могу добавить это к своему ответу. firebase.google.com/docs/crashlytics/customize-crash-reportsfirebase_crashlytics_collection_enabled
значение false в манифесте, сбой не появляется на консоли (я использую v2.9.9). Поэтому я исправил это, добавив отдельный манифест для отладочной сборкиfirebase_crashlytics_collection_enabled=false
иtrue
для выпускаЕсли вы используете Gradle, просто добавьте это в аромат:
источник
This app relies on Crashlytics.
"Проверьте последний документ. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .
Помимо добавления
ext.enableCrashlytics = false
в build.grade вам нужно сделать,источник
This app relies on Crashlytics. Please sign up for access at
ext.enableCrashlytics = false
в build.gradle.buildTypes -> debug, also i'm applying the plugin via
плагине apply: 'io.fabric'`This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Я нашел это самое простое решение:
Вышеуказанные строки создадут статическое логическое поле, вызываемое
enableCrashlytics
вBuildConfig
файле, которое вы можете использовать, чтобы решить, следует ли инициироватьFabric
или нет:ПРИМЕЧАНИЕ. С помощью этого метода Fabrics инициализируется только в сборках выпуска (как указано в приведенном выше коде). Это означает, что вам нужно помещать вызовы статических методов в
Crashlytics
классе вif
блок, который проверяет, была ли инициализирована Fabrics, как показано ниже.В противном случае приложение завершится с
Must Initialize Fabric before using singleton()
ошибкой при тестировании на эмуляторе.источник
2019 Ответ
Я пытался включить Crashlytics только в выпуске и отключить в режиме отладки в течение 2 часов, проверяя консоль Firebase, чтобы узнать, были ли загружены исключения или нет.
Есть 2 возможных способа сделать это.
ОПЦИЯ 1
Это работает, но если вы вызываете какой-либо
Crashlytics
метод в отладочных сборках, приложение вылетает .Приложение / build.gradle
AndroidManifest.xml
ВАРИАНТ 2
Альтернатива, если это позволяет вам вызывать
Crashlytics
методы без предварительной проверкиBuildConfig.DEBUG
. С помощью этой настройки вы можете безопасно вызывать такие методы, какCrashlytics.logException()
- они просто ничего не делают в отладочных сборках. Я не вижу, как отчеты загружаются в режиме отладки.Приложение / build.gradle
AndroidManifest.xml
Приложение onCreate ()
источник
android:value="false"
должен быть изменен наandroid:value="${enableCrashlytics}"
. Не так ли?Используйте это в
MyApplication#onCreate()
РЕДАКТИРОВАТЬ Если вы обновились до Fabric, используйте этот ответ .
источник
BuildConfig
генерируется задачей Gradle, которая гарантированно выполняется. Я также используюbuildConfigField
для установки пользовательских полей, и они всегда работают. tools.android.com/recent/androidstudio045released также предлагает использоватьBuildConfig.DEBUG
.Согласно Google используйте этот код для отключения Crashlytics, и это также улучшит процесс сборки.
ссылка- https://developer.android.com/studio/build/optimize-your-build
источник
Еще одно простое решение, которое мне нравится, потому что оно не требует других файлов манифеста:
Шаг 1 - определить заполнители манифеста в build.gradle
Шаг 2 - используйте их в вашем AndroidManifest.xml
источник
Обратите внимание, что вы также можете отключить надоедливую загрузку символов в отладочной сборке:
Просто поместите его в
build.gradle
свой модуль приложения.источник
Если вы хотите перехватить все сбои (для отладочной и выпускной сборок), но хотите разделить их в Crashlytics Dashboard, вы можете добавить эту строку кода в build.gradle:
Например, если versionName вашего приложения - 1.0.0, ваши сборки выпуска будут помечены как 1.0.0, в то время как отладочные сборки будут 1.0.0-DEBUG
источник
Здесь есть много хороших ответов, но для своего тестирования я использую отладочные сборки для внутренних бета-тестов и внепланового тестирования, где журналы сбоев все еще очень полезны, и я все еще хотел бы сообщить о них. Как и OP, все, что я хотел, это отключить их во время активной разработки, где я часто вызываю и быстро устраняю сбои.
Вместо удаления ВСЕХ отладочных сбоев вы можете отключить отчеты, только когда устройство подключено к вашей машине разработки с помощью следующего кода.
источник
Crashlytics.logException(e)
этот оператор, и это исключение выдает в сборках отладки, поскольку синглтон Fabric не инициализирован. Если вы используете Crashlytics, то всегда инициализируйте синглтон Fabric. Смотри ответ Фами .Проблема в том, что ни одно из решений не работает для последней версии SDK. (Я использую 2.9.0)
Вы не можете отключить его по коду, так как он компилируется в ваш проект и запускается даже до вызова onCreate вашего приложения. Таким образом, другое решение простое - не компилируйте crashlytics, когда это не нужно. Замените вызов 'compile' на 'releaseCompile' в файле build.gradle.
источник
На сегодняшний день самая простая версия при использовании Gradle для сборки:
Он использует новый встроенный синтаксис от Fabric для Crashlytics и работает автоматически со сборкой Gradle.
источник
Странная проблема, с которой я столкнулся: я следовал за ответом xialin (который также появляется на официальном сайте), и он не работал. Оказалось, что я ссылался
BuildConfig
в пакете Fabric, который также содержит статическую переменную DEBUG, которая была установлена в false даже в режиме отладки.Итак, если вы следуете вышеупомянутому решению и по-прежнему получаете отчеты об отладке, убедитесь, что вы ссылаетесь на это:
И не это
источник
Если вас беспокоит
BuildConfig.DEBUG
неправильная настройка, используйтеApplicationInfo
вместо этого:источник
Используйте ароматы или соберите конфиги. Используйте отдельный идентификатор сборки для сборки dev, и все ваши сбои будут продолжаться в отдельном приложении. Может пригодиться, если вы поделитесь сборкой с пирами или используете ее без отладчика. Что-то вроде этого -
источник
Если вы хотите отладочную сборку релиза, вот способ:
Когда вы устанавливаете
debuggable true
BuildConfig.DEBUG будет инициализироваться с true, поэтому я добавил эту переменную в класс BuildConfig.Начальная ткань:
источник
ext.enableCrashlytics
иext.alwaysUpdateBuildId
поскольку они, кажется, нигде не упоминаются. Я что-то упускаю?Мы можем использовать метод ткани isDebuggable ().
Удачного кодирования :)
источник
Вы можете использовать выделенный файл манифеста для режима отладки (работает для меня с Crashlytics 2.9.7):
Создайте файл
app/src/debug/AndroidManifest.xml
и добавьте следующее:Обратите внимание , что этот элемент мета-данные должны быть введены в отлаживать / AndroidManifest.xml только , а не в очередной AndroidManifest.xml
Используемое
CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
мной решение не сработало, и я обнаружил, что crashlytics инициализируется CrashlyticsInitProvider до вызова Application.onCreate () или запуска какого-либо действия, что означает, что ручная инициализация матрицы в приложении или деятельности не имеет эффект, потому что ткань уже инициализирована.источник
Шаг 1: В build.grade
Шаг 2: в манифесте
Шаг 3: В приложении или в первом действии
Я не уверен, что шаг 3 необходим, но чтобы версия выпуска работала без сбоев. источник: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting
источник
Эта работа для меня:
и в buildTypes:
источник
Существует два варианта отключения Firebase Crashlytics для следующей версии com.google.firebase: firebase-crashlytics: 17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
ИЛИ
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
источник
Другой способ, если вы хотите сделать это только в своей среде IDE, - выйти из плагина. Очевидно, он прекратит отправку отчетов, пока вы создаете сборки без повторного входа в систему.
источник
Добавьте это в build.gradle вашего приложения:
Отключите комплект Crashlytics во время выполнения. В противном случае комплект Crashlytics выдаст ошибку:
В AndroidManifest.xml добавьте
источник
2020 Post Fabric Ответ
Вставьте приведенный ниже код в ваш класс Application и вызовите метод
setCrashlyticsState
из вашего приложения onCreate. При желании вы можете добавить свои идентификаторы тестового устройства кdebugDevices
HashSet, чтобы ваши личные устройства можно было игнорировать даже при сборке в режиме выпуска.Заметка. Идентификатор устройства, возвращаемый пользователем
Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
, не гарантируется быть уникальным или постоянным (он может измениться при сбросе настроек или вручную на устройстве с правами root). Но это должно быть достаточно хорошо.Проверьте это BuildConfig. смотрит на правильный класс BuildConfig. Часто есть несколько вариантов, и неправильный может быть втянут.
источник
Это глупый ответ, я знаю.
Просто закомментируйте
Fabric.with(this, new Crashlytics());
, поработайте над этим и раскомментируйте его, когда захотите выпустить.источник