Как отключить Crashlytics во время разработки
Есть ли какой-либо простой способ отключить SDK от Crashlytics во время разработки?
Я не хочу, чтобы он посылал сбой каждый раз, когда я делал что-то глупое
С другой стороны, я не хочу комментировать Crashlytics.start()
и, возможно, риск забыть раскомментировать его и совершить
Ответы
Ответ 1
Марк из Crashlytics здесь. Вот несколько способов отключить Crashlytics, когда вы делаете свои отладочные сборки!
-
Используйте другую версию android: versionString для отладки и выпуска сборок, а затем отключите отчеты о сбоях из веб-панели Crashlytics для отладочной версии.
-
Оберните вызов Crashlytics.start() в инструкции if, которая проверяет флаг отладки. Вы можете использовать либо настраиваемый флаг, либо такой подход, как предлагаемые здесь: Как проверить, подписана ли APK или "отладочная сборка" ?
Ответ 2
Я нашел решение от Crashlytics (с интеграцией Fabric)
Поместите следующий код внутри класса Application onCreate()
Crashlytics crashlytics = new Crashlytics.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, crashlytics);
EDIT:
В 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());
(скопирован из Запрещенный метод устаревших отключений())
EDIT2:
Вы также можете добавить это в свой buildType
в gradle. Эта команда отключает отправку файла сопоставления crashlytics и генерирует идентификатор для каждой сборки, что ускоряет создание gradle сборок этих ароматов. (Он не отключает Crashlytics во время выполнения.) См. Mike B здесь.
buildTypes {
release {
....
}
debug {
ext.enableCrashlytics = false
}
}
Ответ 3
Выбранный ответ больше не верен. 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");
}
Ответ 4
Если вы используете Gradle, просто добавьте это в аромат:
ext.enableCrashlytics = false
Ответ 5
Ознакомьтесь с последним документом.
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);
Ответ 6
Я нашел этот самым легким решением:
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()
при тестировании на эмуляторе.
Ответ 7
Используйте это в MyApplication#onCreate()
if (!BuildConfig.DEBUG) Crashlytics.start(this);
ИЗМЕНИТЬ
Если вы перешли на Fabric, вместо этого используйте .
Ответ 8
Если вы хотите зафиксировать все сбои (для отладки и создания релизов), но хотите их разделить на панели мониторинга Crashlytics, вы можете добавить эту строку кода в build.gradle:
debug {
versionNameSuffix "-DEBUG"
}
Например, если ваше приложение versionName равно 1.0.0, ваши версии релизов будут помечены как 1.0.0, тогда как сборки отладки будут 1.0.0-DEBUG
Ответ 9
Здесь есть много хороших ответов, но для моего тестирования я использую отладочные сборки для собственных бета-тестов и тестирования вне лаборатории, где журналы сбоев по-прежнему очень полезны, и я все равно хотел бы сообщить об этом. Как и OP, все, что я хотел, было отключить их во время активной разработки, где я часто вызываю и быстро разрешаю аварии.
Вместо удаления всех сбоев отладки вы можете отключить отчеты только в том случае, если устройство подключено к вашей машине разработки с помощью следующего кода.
if (!Debug.isDebuggerConnected()) {
Fabric.with(this, new Crashlytics());
}
Ответ 10
Обратите внимание, что вы также можете отключить раздражающую загрузку символов в сборке отладки:
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
вашего прикладного модуля.
Ответ 11
Проблема в том, что ни одно из решений не работает для последней версии SDK. (Я использую 2.9.0)
Вы не можете отключить его по коду, так как он компилируется в ваш проект и запускается даже до вызова onCreate вашего приложения. Таким образом, другое решение простое - не компилируйте crashlytics, когда в этом нет необходимости. Замените вызов 'compile' на 'releaseCompile' в файле build.gradle.
releaseCompile('com.crashlytics.sdk.android:crashlytics:[email protected]') {
transitive = true
}
Ответ 12
Согласно Google используйте этот код для отключения Crashlytics, и это также улучшит процесс сборки.
![enter image description here]()
reference- https://developer.android.com/studio/build/optimize-your-build
Ответ 13
Еще одно простое решение, которое мне нравится, потому что оно не требует других файлов манифеста:
Шаг 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}" />
Ответ 14
Простая версия при использовании Gradle для сборки:
if (!BuildConfig.DEBUG) {
Fabric.with(this, new Crashlytics());
}
Он использует новый встроенный синтаксис из ткани для Crashlytics и работает автоматически с помощью сборки Gradle.
Ответ 15
Странная проблема, с которой я столкнулся: я последовал за xialin (что также появляется на официальном сайте), и это не сработало. Оказалось, что я ссылался на BuildConfig
в пакете Fabric, который также содержит статическую переменную DEBUG, которая была установлена в false даже в режиме отладки.
Итак, если вы будете следовать вышеупомянутому решению, и вы все равно получите отладочные отчеты, убедитесь, что вы ссылаетесь на это:
import com.yourpackagename.BuildConfig;
И не это:
import io.fabric.sdk.android.BuildConfig;
Ответ 16
Если вы обеспокоены тем, что BuildConfig.DEBUG
не настроен правильно, используйте ApplicationInfo
вместо этого:
boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );
Ответ 17
Использовать ароматы или строить конфиги. Используйте отдельный идентификатор сборки для сборки dev, и все ваши сбои будут продолжаться в отдельном приложении. Может пригодиться в случае совместного использования сборки с одноранговыми узлами или использования ее без отладчика. Что-то вроде этого -
productFlavors {
dev {
applicationId "io.yourapp.developement"
}
staging {
applicationId "io.yourapp.staging"
}
production {
applicationId "io.yourapp.app"
}
Ответ 18
Если вы хотите создать отладочную версию, выполните следующие действия:
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 true
, ваш BuildConfig.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);
Ответ 19
Мы можем использовать метод ткани isDebuggable().
import static io.fabric.sdk.android.Fabric.isDebuggable;
if(! isDebuggable()){
// set Crashlytics ...
}
Удачного кодирования :)
Ответ 20
Вы можете использовать выделенный файл манифеста для режима отладки (работает для меня с 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() или любой активности запущен, что означает, что ручная инициализация матрицы в приложении или действии не имеет никакого эффекта, поскольку ткань уже инициализирована.
Ответ 21
2019 Ответ
Я пытался включить Crashlytics только в выпуске и отключить в режиме отладки в течение 2 часов, проверяя консоль Firebase, чтобы узнать, были ли загружены исключения или нет.
Есть 2 возможных способа сделать это.
ОПЦИЯ 1
Это работает, но если вы Crashlytics
какой- Crashlytics
метод Crashlytics
в отладочных сборках, приложение Crashlytics
крах.
Приложение /build.gradle
android {
buildTypes {
release {
manifestPlaceholders = [crashlyticsEnabled: true]
}
release {
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)
Ответ 22
Другой способ, если вы хотите сделать это только на своей IDE, - это выйти из плагина. По-видимому, он перестанет отправлять отчеты, пока вы создаете сборки без повторного входа.
Ответ 23
-
Добавьте это в ваши приложения build.gradle:
android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
-
Отключите комплект 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);
-
В AndroidManifest.xml добавьте
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
Ответ 24
Шаг 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
Ответ 25
Эта работа для меня:
releaseCompile 'com.crashlytics.sdk.android:crashlytics:2.9.9'
и в buildTypes:
debug {
ext.enableCrashlytics = false
}
Ответ 26
Это глупый ответ, я знаю,
Просто закомментируйте Fabric.with(this, new Crashlytics());
, работайте над этим и раскомментируйте его, когда хотите его выпустить.