我希望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
。
作为Martin Rajniak mentioned,你只能在extra
对象上调用ExtensionAware
,而BuildType
不被声明为一个。
但是,在运行时,构建类型实际上是ExtensionAware
,这就是为什么它在Groovy中起作用的原因,因为它的动态性,但不在Kotlin中,此范围内的extra
将引用Project
的扩展。
为了在没有Groovy的情况下实现这一点,我们可以简单地将构建类型转换为ExtensionAware
:
android {
buildTypes {
getByName("debug") {
(this as ExtensionAware).extra["alwaysUpdateBuildId"] = false
}
}
}
我找到了解决这个问题的方法。创建一个文件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建议。