You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为不同flavor和buildType配置对应applicationId(kotlin-dsl环境)

Android Gradle Kotlin DSL 多风味多构建类型applicationId配置方案

实现核心思路:通过AGP提供的变体动态配置能力,针对不同flavor和buildType的组合自定义拼接规则,release版本直接使用基础applicationId,非release版本按flavor对应的规则拼接后缀。

完整配置代码

在app模块的build.gradle.kts文件中修改android配置块:

android {
    namespace = "com.example.demo" // 替换为你自己的项目namespace
    compileSdk = 34 // 替换为你的编译版本号

    defaultConfig {
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }

    // 配置已有的5种buildType,可保留你原有的混淆、签名、调试开关等配置
    buildTypes {
        getByName("dev") {
            isMinifyEnabled = false
            // 其他原有配置保留
        }
        getByName("debug") {
            isMinifyEnabled = false
            // 其他原有配置保留
        }
        getByName("uat") {
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
            // 其他原有配置保留
        }
        getByName("preprod") {
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
            // 其他原有配置保留
        }
        getByName("release") {
            isMinifyEnabled = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
            // 其他原有配置保留
        }
    }

    // 配置风味维度和已有的2种flavor
    flavorDimensions += "channel"
    productFlavors {
        create("flavor1") {
            dimension = "channel"
        }
        create("flavor2") {
            dimension = "channel"
        }
    }

    // 核心逻辑:动态设置不同变体的applicationId
    androidComponents {
        onVariants { variant ->
            val buildTypeName = variant.buildType ?: return@onVariants
            val flavorName = variant.productFlavors.first().second

            // release版本直接使用无后缀的基础id
            if (buildTypeName == "release") {
                variant.applicationId.set("com.example.${flavorName}")
                return@onVariants
            }

            // 非release版本按flavor规则拼接后缀
            variant.applicationId.set(
                when (flavorName) {
                    "flavor1" -> "com.example.flavor1${buildTypeName}"
                    "flavor2" -> "com.example.flavor2.${buildTypeName}"
                    else -> variant.applicationId.get()
                }
            )
        }
    }
}

该方案适配AGP 7.0及以上版本,无额外依赖,配置规则可直接扩展适配更多flavor或buildType

配置效果验证

所有构建组合的applicationId完全匹配需求:

  • flavor1 + dev:com.example.flavor1dev
  • flavor1 + debug:com.example.flavor1debug
  • flavor1 + uat:com.example.flavor1uat
  • flavor1 + preprod:com.example.flavor1preprod
  • flavor1 + release:com.example.flavor1
  • flavor2 + dev:com.example.flavor2.dev
  • flavor2 + debug:com.example.flavor2.debug
  • flavor2 + uat:com.example.flavor2.uat
  • flavor2 + preprod:com.example.flavor2.preprod
  • flavor2 + release:com.example.flavor2

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:39:04