Ответ 1
Во время создания команды fabricGenerateResources
вызывается и ищет файл с именем fabric.properties
со следующим содержимым:
apiSecret=YOUR_BUILD_SECRET
apiKey=YOUR_API_KEY
Таким образом, нам нужно создать файл fabric.properties
до этого.
Я нашел это решение и немного изменил его, чтобы полностью поддерживать варианты приложений не только для создания типов.
Добавьте этот код в android
раздел build.gradle
:
File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
applicationVariants.all { variant ->
variant.productFlavors.each { flavor ->
def variantSuffix = variant.name.capitalize()
def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
Properties properties = new Properties()
properties.put("apiKey", flavor.fabricApiKey)
properties.put("apiSecret", flavor.fabricApiSecret)
properties.store(new FileWriter(crashlyticsProperties), "")
}
def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
generateResourcesTask.dependsOn generatePropertiesTask
generateResourcesTask.doLast {
println "Removing fabric.properties"
crashlyticsProperties.delete()
}
}
}
Он выполняет итерации по вариантам приложений, и для каждого варианта приложения создает задачу, которая генерирует файл fabric.properties
и задачу, которая удаляет этот файл после того, как плагин Fabric Gradle генерирует ресурсы приложения.
Теперь вам нужно определить вкус продукта или тип сборки fabricApiKey
и fabricApiSecret
:
productFlavors {
flavor1 {
ext.fabricApiKey = "FLAVOR1_API_KEY"
ext.fabricApiSecret = "FLAVOR1_API_SECRET"
}
}
ext
- это объект ExtraPropertiesExtention, предоставляемый каждым ExtensionAware. Он позволяет добавлять новые объекты к существующему объекту. В моем случае flavor1
есть объект ExtensionAware
, и его можно расширить с помощью новых свойств, используя синтаксис ext.someProperty = "value"
, и позже эти свойства могут использоваться как flavor.someProperty, flavor.fabricApiKey
.
Также лучше включить fabric.properties
в .gitignore
.
И не забудьте удалить ext.enableCrashlytics = false
из типа сборки отладки, если вы использовали его для отключения Crashlytics во время отладки. Вместо этого вы можете отключить его в Application.onCreate
:
Fabric.with(this, new Crashlytics.Builder().core(
new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());