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>
Другие вопросы по тегам