Плагин Android и Fabric (Crashlytics) всегда генерирует UUID (Gradle Kotlin DSL) - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу, чтобы Fabric прекратила генерировать UUID для каждой сборки. То, что раньше работало с Groovy DSL от Gradle, не работает с более новым Kotlin DSL. Как мне достичь своей цели с помощью Kotlin DSL?

(версия Gradle 4.10.2, ткань 1.25.4)

В соответствии с документацией Fabric , вы можете добавить следующее в скрипт сборки вашего приложения

android {
    buildTypes {
        debug {
          // Only use this flag on builds you don't proguard or upload
          // to beta-by-crashlytics
          ext.alwaysUpdateBuildId = false

и это работает. Это препятствует тому, чтобы Fabric генерировал UUID на каждой отладочной сборке. Однако, если я преобразую свой скрипт сборки в Kotlin DSL, следующий не работает

android {
    buildTypes {
        getByName("debug") {
          // Only use this flag on builds you don't proguard or upload
          // to beta-by-crashlytics
          ext.set("alwaysUpdateBuildId", false)

Ткань теперь игнорирует это значение.

Я пробовал варианты, такие как следующее:

project.ext.set("alwaysUpdateBuildId", false)
rootProject.ext.set("alwaysUpdateBuildId", false)
val alwaysUpdateBuildId by extra(false)
val alwaysUpdateBuildId by project.extra(false)
val alwaysUpdateBuildId by rootProject.extra(false)

Нет работы.

Для дальнейшего использования задача Gradle, генерирующая это значение, называется :app:fabricGenerateResourcesDebug и имеет тип DefaultTask.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Как отметил Мартин Райняк , вы можете вызывать extra только на ExtensionAware объектах, при этом BuildType не объявляется как один.

Однако во время выполнения типы сборки на самом деле ExtensionAware, поэтому это работает в Groovy из-за его динамичности, а не в Kotlin, где extra в этой области будет ссылаться на расширения Project.

Чтобы достичь этого без Groovy, мы можем просто привести тип сборки к ExtensionAware:

android {
    buildTypes {
        getByName("debug") {
            (this as ExtensionAware).extra["alwaysUpdateBuildId"] = false
        }
    }
}
0 голосов
/ 08 декабря 2018

Я нашел решение этой проблемы. Создайте файл fabric.gradle (скрипт сборки Groovy!) И поместите его где-нибудь в структуру своего проекта. Он будет иметь следующее содержимое:

// or "com.android.library"
project.pluginManager.withPlugin("com.android.application") {
    android.buildTypes.debug.ext.alwaysUpdateBuildId = false
}

Теперь, в скрипте сборки для вашего модуля (назовем его app/build.gradle.kts), примените этот плагин скрипта:

apply(from = "path/to/fabric.gradle")

Этот обходной путь основан на рекомендации здесь , в учебнике по Kotlin DSL.

...