Android studio通过选择不同的Build Variant执行不同的groovy代码
这些天由于实际需要,想要通过选择Build Variant
(比如生产环境,准生产环境,测试环境等),直接在gradle里通过groovy代码自动做一些环境配置,主要就是放置不同的文件到asserts
文件夹中。
但是发现buildTypes
和productFlavors
里面不同的代码块不管选择哪个Build Variant
都会从上到下全部执行一遍,则无法根据不同的环境执行不同的代码。
这两天看实战gradle
这本书得到了一些灵感,追踪不同Build Variant
的具体task,发现其执行的task并不完全相同,于是就可以使用这种方式,将以下代码放入build.gradle中
gradle.taskGraph.whenReady { TaskExecutionGraph taskExecutionGraph ->
//与Build Variant对应,默认为error
def buildVariant = "error"
//不同的Build Variant对应不同的任务
def variantMap = ['outTest' : "task ':app:checkOutTestDebugManifest'",
'production' : "task ':app:checkProductionDebugManifest'",
'preproduction': "task ':app:checkPreproductionDebugManifest'"]
//遍历每一个task
taskExecutionGraph.allTasks.each { output ->
switch (output.toString().trim()) {
case variantMap.outTest:
buildVariant = "outTest"
println('外网测试环境')
break
case variantMap.production:
buildVariant = "production"
println('生产环境')
break
case variantMap.preproduction:
buildVariant = "preproduction"
println('准生产环境')
break
}
}
//如果没有包含备选的任务,抛出异常
if (buildVariant == 'error') {
throw new Exception("无配置的task,请重新配置")
}
putFile(buildVariant)
}
选择Build Variant
,在android studio左下角:
查看task方法: