Android: отключение сбоев для отладочной сборки
Я просто хотел отключить сбои для отладочной сборки.
Поэтому я следовал инструкции в их официальном документе. https://docs.fabric.io/android/crashlytics/build-tools.html
Согласно документу, я должен сделать следующее, поэтому я сделал это. Сначала я добавил ниже,
android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
И я добавил ниже в мой класс приложений.
// Set up Crashlytics, disabled for debug builds
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);
Но я все еще получаю эту ошибку.
Caused by: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
Я что-то упускаю?
Я проверил тот тип сборки, который я пытался собрать, и он работал хорошо раньше без этой конфигурации.
Моя крашлитская версия 2.9.4.
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.4'
Спасибо!
3 ответа
Чтобы отключить Firebase перед запуском приложения, вам необходимо добавить следующий код в свой AndroidManifest.xml:
<application
... >
...
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${crashlyticsCollectionEnabled}" />
</application>
Выражение ${crashlyticsCollectionEnabled} называется заполнителем манифеста, и его значение берется из сборки вашего основного модуля. файл gradle:
android {
...
buildTypes {
debug {
manifestPlaceholders = [crashlyticsCollectionEnabled:"false"]
...
}
release {
manifestPlaceholders = [crashlyticsCollectionEnabled:"true"]
...
}
}
}
Что ж, теперь, когда я смотрю на ваш код, похоже, что есть определенно лучшее решение для этого, чем то, как я это делаю, но подход, который я использую, работает очень хорошо, поэтому я поделюсь им в любом случае (я использую только две сборки типы: DEBUG и RELEASE и без вариантов, так что мне этого достаточно). Я просто не инициализирую Crashlytics вообще (в MyApp#onCreate
) когда BuildConfig.DEBUG == True
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
if (!BuildConfig.DEBUG) {
Fabric.with(this, new Crashlytics());
}
}
}
Но я уверен, что кто-то еще придумал лучшее решение.
На уровне вашего приложения build.gradle добавьте это:
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
dependencies {
compile('com.crashlytics.sdk.android:crashlytics:KIT_VERSION@aar') {
transitive = true;
}
}
android {
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
production {
buildConfigField 'boolean', 'IS_FABRIC_DISABLED', 'false'
}
fabricOn {
buildConfigField 'boolean', 'IS_FABRIC_DISABLED', 'false'
}
fabricOff {
buildConfigField 'boolean', 'IS_FABRIC_DISABLED', 'true'
}
}
}
Добавьте строку ниже в методе класса приложения onCreate:(примечание: это в kotlin, конвертируйте его в java)
val core = CrashlyticsCore.Builder().disabled(BuildConfig.IS_FABRIC_DISABLED).build()
Fabric.with(this, Crashlytics.Builder().core(core).build())
После добавления этого вы увидите слева варианты сборки с опцией diffrent. (здесь я не применил опцию ткани, она показывает опцию по умолчанию)
Похоже, вам не хватает ключа API, если да, то добавьте в файл манифеста под тегом приложения, как показано ниже
<application
.........
.........
<meta-data
android:name="io.fabric.ApiKey"
android:value="<FABRIC_API_KEY>"
/>
</application>