You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Gradle Kotlin DSL中定义Android Product Flavors?

在Gradle Kotlin DSL中定义Android Product Flavors

问题背景

我最近把Android项目的Gradle配置从Groovy迁移到了Kotlin DSL,项目能正常运行,但在定义Product Flavors的时候卡壳了。我的现有配置大致如下:

android {
    compileSdkVersion(Config.Android.compileSdkVersion)
    buildToolsVersion(Config.Android.buildToolsVersion)
    defaultConfig {
        minSdkVersion(Config.Android.minSdkVersion)
        targetSdkVersion(Config.Android.targetSdkVersion)
        versionCode = Config.Version.code
        versionName = Config.Version.name
    }
    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
        }
    }
    flavorDimensions("dimension")
    productFlavors {
        // 不知道这里怎么写Product Flavors
    }
}

解决方案

经过一番摸索,我发现Kotlin DSL和Groovy DSL在这里的语法有明显差异——在Kotlin里需要用create()方法来创建Product Flavors,而不是像Groovy那样直接写名称。修改后的可运行配置如下:

android {
    // ... 其他原有配置保持不变 ...

    flavorDimensions("dimension")
    productFlavors {
        create("flavor1") {
            // 这里配置flavor1的专属参数,比如应用ID后缀、版本名后缀等
            applicationIdSuffix = ".flavor1"
            versionNameSuffix = "-flavor1"
        }
        create("flavor2") {
            applicationIdSuffix = ".flavor2"
            versionNameSuffix = "-flavor2"
        }
    }
}

补充说明

Kotlin DSL是强类型的,所以不能像Groovy那样通过动态属性的方式直接定义Flavor,必须调用create()方法来显式创建每个Product Flavor实例。你还可以在每个Flavor的闭包里配置更多专属逻辑,比如资源覆盖、签名配置、依赖差异等,核心逻辑和Groovy DSL一致,只是语法上更严谨。

内容的提问来源于stack exchange,提问作者kukuh

火山引擎 最新活动