我在 Android 应用程序的 gradle 文件中有两种风格:
productFlavors {
production { }
devel { }
}
我有一个配置文件,在构建项目时,我需要在运行任何其他任务之前将其复制到 app/
目录。这是每个口味的配置文件,即:
etc/configuration-production.json
etc/configuration-devel.json
在构建 devel
时,我基本上需要这样做:
cp etc/configuration-devel.json app/configuration.json
构建产品
时:
cp etc/configuration-production.json app/configuration.json
我如何在 gradle 中自动执行此操作?此副本需要在执行构建时首先发生,因为某些任务需要 app/configuration.json
文件存在。
我试过:
task copyConfig(type: Copy) {
from "etc/configuration-${Flavor.name}.json"
into "app/configuration.json"
}
build.dependsOn copyConfig
但是没有用。 copyConfig
任务未运行。
最佳答案
您可以将以下内容添加到您的 app
build.gradle
以将您的文件从 etc/configuration-XXX.json
复制到 app/configuration.json
在各自任务的第一个语句中 assembleDevel.*
& assembleProduction.*
:
def cp(copyType) {
println "copying " + "../etc/configuration-" + copyType + ".json"
copy {
from "../etc/configuration-" + copyType + ".json"
into '.'
rename { String fileName ->
fileName.replace("configuration-" + copyType + ".json", "configuration.json")
}
}
}
tasks.whenTaskAdded { task ->
if (task.name ==~ /assembleDevel.*/) {
task.doFirst() {
cp("devel")
}
} else if (task.name ==~ /assembleProduction.*/) {
task.doFirst() {
cp("production")
}
}
}
这是必需的配置:
app/
├── build.gradle
etc/
├── configuration-production.json
└── configuration-devel.json
如果 assembleDevel.*
/assembleProduction.*
不是您正在寻找的任务,您可以将它们替换为例如:prepareDevel.*Dependencies
/prepareProduction.*Dependencies
关于android - 在 Android gradle 构建开始时根据风格复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450615/