代码之家  ›  专栏  ›  技术社区  ›  AutonomousApps

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

  •  0
  • AutonomousApps  · 技术社区  · 7 年前

    我希望Fabric停止在每个构建上生成UUID。过去与Gradle的Groovy DSL一起使用的东西与较新的Kotlin DSL不起作用。

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

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

    这是有效的。它防止结构在每个调试生成上生成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 .

    1 回复  |  直到 7 年前
        1
  •  10
  •   Ivan Tokić    7 年前

    mentioned ,你只能打电话 extra 在…上 ExtensionAware BuildType 没有被宣布为一个。

    扩展软件 ,这就是为什么它在Groovy中工作的原因,因为它的动态性,但在Kotlin where中不起作用 额外的 在此范围内,将参考 Project 的扩展。

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

    android {
        buildTypes {
            getByName("debug") {
                (this as ExtensionAware).extra["alwaysUpdateBuildId"] = false
            }
        }
    }
    
        2
  •  3
  •   AutonomousApps    7 年前

    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")
    

    此解决方案基于建议 here ,在Kotlin DSL底漆中。