Android和Fabric(Crashlytics)插件始终会生成UUID(Gradle Kotlin DSL)

时间:2018-11-09 22:03:19

标签: android google-fabric gradle-kotlin-dsl

我希望Fabric在每个构建中停止生成UUID。与Gradle的Groovy DSL一起使用的功能不适用于较新的Kotlin DSL。 如何使用Kotlin DSL实现我的目标?

(版本4.10.2,结构1.25.4)

根据Fabric的documentation,您可以将以下内容添加到应用的构建脚本中

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)

Fabric现在忽略此值。

我尝试了以下变化:

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 :(得分:2)

作为Martin Rajniak mentioned,您只能在extra个对象上调用ExtensionAware,而BuildType不会被声明为一个。

但是,在运行时,构建类型实际上是ExtensionAware,这就是为什么它因其动态性而在Groovy中起作用的原因,而不是在Kotlin中起作用的原因,在Kotlin中,该范围内的extra将引用{{1} }的扩展名。

为了在没有Groovy的情况下实现这一目标,我们可以简单地将构建类型转换为Project

ExtensionAware

答案 1 :(得分:1)

我找到了解决此问题的方法。创建文件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入门中的建议here