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

如何在Gradle运行时获取当前构建类型?

在Gradle中获取当前构建类型的方法

当然有办法啦!在Android Gradle插件体系里,我们可以通过几种实用的方式,在运行时判断当前正在执行的构建变体或任务对应的构建类型,让你的build.gradle里的任务逻辑能根据不同构建场景做出针对性决策。

方法一:通过任务名称直接判断

像assembleDebug、assembleRelease这类标准任务的名称里,本身就包含了构建类型的关键词。我们可以利用Gradle的任务图监听机制,在任务执行前判断要运行的任务:

apply plugin: 'com.android.library'

ext.buildInProgress = ""

// 任务图构建完成后触发,检查即将执行的任务
gradle.taskGraph.whenReady { graph ->
    if (graph.hasTask(':assembleDebug')) {
        ext.buildInProgress = "debug"
        println "当前正在执行Debug构建"
        // 在这里添加Debug构建专属的逻辑,比如拷贝测试资源、开启日志等
    } else if (graph.hasTask(':assembleRelease')) {
        ext.buildInProgress = "release"
        println "当前正在执行Release构建"
        // 在这里添加Release构建专属的逻辑,比如混淆配置、打包签名等
    }
}

buildscript {
    repositories {
        maven { url = 'url_here' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

方法二:通过Android构建变体对象精准获取

如果你的项目有自定义构建类型(比如staging、beta),或者需要获取变体的更多细节(比如产品风味+构建类型的组合),可以直接访问Android插件提供的变体对象:

apply plugin: 'com.android.library'

ext.buildInProgress = ""

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 28
    }

    // 遍历所有库变体(应用模块用applicationVariants)
    libraryVariants.all { variant ->
        // 为每个变体的assemble任务添加前置逻辑
        variant.assembleProvider.configure { task ->
            task.doFirst {
                ext.buildInProgress = variant.buildType.name
                println "当前构建变体:${variant.name},对应构建类型:${variant.buildType.name}"
                // 根据构建类型执行不同逻辑
                if (variant.buildType.name == 'debug') {
                    // Debug构建专属操作
                } else if (variant.buildType.name == 'release') {
                    // Release构建专属操作
                } else {
                    // 自定义构建类型的操作
                }
            }
        }
    }
}

buildscript {
    repositories {
        maven { url = 'url_here' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

⚠️ 注意:如果是应用模块(com.android.application插件),要把libraryVariants换成applicationVariants哦!

方法三:通过命令行参数手动传递(灵活扩展)

如果需要更灵活的控制,也可以在执行Gradle命令时手动指定构建类型参数,比如:

./gradlew assembleDebug -PbuildType=debug

然后在build.gradle中读取这个参数:

ext.buildInProgress = project.properties.get('buildType', '')
if (ext.buildInProgress == 'debug') {
    // 执行Debug相关逻辑
}

这几种方法各有侧重:第一种适合快速判断任务对应的构建类型,第二种能深度对接Android变体系统,第三种则提供了额外的灵活度,你可以根据自己的项目需求选择最合适的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:08:15