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

如何编写Gradle任务实现多Build Variant组合构建

没问题!在Android Gradle项目里,咱们完全可以通过自定义任务来实现不同Build Variant的组合构建,核心思路就是让自定义任务依赖官方自动生成的assemble<Variant>任务。下面给你两种实用的实现方式:

方式一:固定组合的自定义任务

如果你只需要几个特定的组合(比如staging+release、debug+release),可以直接写死对应的任务,简单直观:

// 同时构建staging和release变体
task assembleStagingAndRelease {
    dependsOn 'assembleStaging', 'assembleRelease'
    group = 'Build'
    description = 'Assembles both staging and release builds'
}

// 同时构建debug和release变体
task assembleDebugAndRelease {
    dependsOn 'assembleDebug', 'assembleRelease'
    group = 'Build'
    description = 'Assembles both debug and release builds'
}

// 同时构建debug和staging变体
task assembleDebugAndStaging {
    dependsOn 'assembleDebug', 'assembleStaging'
    group = 'Build'
    description = 'Assembles both debug and staging builds'
}

把这段代码加到你的app/build.gradle(或模块的build.gradle)里,同步Gradle后:

  • 你可以在Android Studio右侧的Gradle面板中,找到Tasks > Build分组,直接点击对应的任务运行
  • 也可以在终端执行命令:比如./gradlew assembleStagingAndRelease(Windows系统用gradlew.bat assembleStagingAndRelease)
方式二:动态生成组合任务(更灵活)

如果之后可能需要更多变体组合,不想每次都手动加任务,可以用Gradle的任务规则来动态生成组合任务:

// 动态创建任意两个变体的组合构建任务,命名规则:assemble<Variant1>And<Variant2>
tasks.addRule("Pattern: assemble<Variant1>And<Variant2>") { String taskName ->
    if (taskName.startsWith("assemble") && taskName.contains("And")) {
        // 拆分任务名称,提取两个变体的名字
        def variantPart = taskName.replace("assemble", "").split("And")
        def variant1 = variantPart[0]
        def variant2 = variantPart[1]
        
        // 检查对应的assemble任务是否存在
        def assembleTask1 = tasks.findByName("assemble${variant1}")
        def assembleTask2 = tasks.findByName("assemble${variant2}")
        
        // 确保两个变体不同且对应的任务存在
        if (assembleTask1 != null && assembleTask2 != null && variant1 != variant2) {
            task(taskName) {
                dependsOn assembleTask1, assembleTask2
                group = 'Build'
                description = "Assembles both ${variant1.toLowerCase()} and ${variant2.toLowerCase()} builds"
            }
        }
    }
}

这种方式的好处是不需要提前定义所有组合:

  • 比如你想构建debug和staging,直接运行./gradlew assembleDebugAndStaging
  • 想构建staging和release,就运行./gradlew assembleStagingAndRelease
  • 只要你的项目里存在对应的变体,Gradle就会自动生成对应的组合任务
注意事项
  • 变体名称的大小写要和项目中定义的一致:比如官方生成的任务是assembleDebug、assembleStaging,所以组合任务里的变体名要首字母大写(比如Debug、Staging)
  • 如果你的变体是Product Flavor + Build Type的组合(比如freeDebug、paidRelease),这个逻辑同样适用,只要把完整的变体名称写对就行
  • 开启Gradle并行构建(在gradle.properties里设置org.gradle.parallel=true)可以大幅提升多变体构建的速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:09:11