Android和Fabric(Crashlytics)插件总是生成一个UUID(Gradle Kotlin DSL)

问题描述 投票:1回答:2

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

(Gradle版本4.10.2,Fabric 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

android google-fabric gradle-kotlin-dsl
2个回答
6
投票

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

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

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

android {
    buildTypes {
        getByName("debug") {
            (this as ExtensionAware).extra["alwaysUpdateBuildId"] = false
        }
    }
}

2
投票

我找到了解决这个问题的方法。创建一个文件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建议。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.