我正在使用 Android Studio 3。
对于每种口味,我想复制 mapping.txt
并重命名它。
我的 Gradle 任务:
task deployApks(type: Copy) {
android.applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
variant.outputs.all {
def flavor = variant.productFlavors.name.get(0)
def dirApk = System.getProperty("user.dir") + '/app/build/' + flavor + '/release/'
def dirMapping = System.getProperty("user.dir") + '/app/build/outputs/mapping/' + flavor + '/release/'
//copy apk and mapping.txt
from dirApk, dirMapping
include '*-release.apk', 'mapping.txt'
into dirDeploy
//rename mapping.txt
from dirDeploy
include 'mapping.txt'
into dirDeploy
rename 'mapping.txt', 'mapping-' + flavor + '.txt'
println("Rename mapping.txt tomapping-" + flavor + ".txt")
}
}
}
}
我想要的部署目录:
我得到什么:
gradle 复制是异步的吗?
看起来如果在所有副本之后完成重命名。
最佳答案
你可能不知道,gradle build 包含 3 个阶段:
任务(包括您使用的
Copy
)操作(任务是按顺序运行的操作的集合)在第二阶段配置。夏娃如果你把循环放在任务的主体中,最后一次迭代将获胜。最简单的方法是将您的任务更改为以下内容(手动复制):task deployApks {
doLast {
android.applicationVariants.all { variant ->
if (variant.buildType.name == 'release') {
variant.outputs.all {
def flavor = variant.productFlavors.name.get(0)
def dirApk = System.getProperty("user.dir") + '/app/build/' + flavor + '/release/'
def dirMapping = System.getProperty("user.dir") + '/app/build/outputs/mapping/' + flavor + '/release/'
//copy apk and mapping.txt
copy {
from dirApk, dirMapping
include '*-release.apk', 'mapping.txt'
into dirDeploy
rename 'mapping.txt', 'mapping-' + flavor + '.txt'
}
}
}
}
}
}
如果这样可以解决问题 - (您不需要任务缓存)您可以使用。否则需要配置
Copy
适本地执行任务,甚至编写自定义任务。
关于android - 循环中的 Gradle 复制和重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253559/