如何在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




