如何编写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
相关产品推荐
相关产品推荐

