Android 循环中的渐变复制和重命名
我在安卓工作室3工作 对于每种口味,我都要复制Android 循环中的渐变复制和重命名,android,gradle,build.gradle,Android,Gradle,Build.gradle,我在安卓工作室3工作 对于每种口味,我都要复制mapping.txt并重命名它 我的Gradle任务: task deployApks(type: Copy) { android.applicationVariants.all { variant -> if (variant.buildType.name == 'release') { variant.outputs.all { def f
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")
}
}
}
}
在部署目录中需要什么:
- flavor1-release.apk
- mapping-1.txt
- flavor2-release.apk
- mapping-2.txt
- flavor1-release.apk
- mapping-1.txt
- flavor2-release.apk
看起来好像在所有副本之后都进行了重命名。您可能不知道,但gradle构建包含3个阶段:
- 初始化
- 配置
- 执行
Copy
)操作(任务是按顺序运行的操作集合)在第二阶段配置。Eve如果您将循环放入任务体中,则最后一次迭代将获胜。最简单的方法是将任务更改为以下内容(手动复制):
如果这解决了问题-(您不需要任务缓存),您可以使用。否则,您需要适当地配置
复制任务,甚至编写自定义任务。我认为关键是variant.assemble.doLast
。我首先制作所有apk文件,完成后运行doLast任务复制和重命名mapping.txt文件
渐变4(兼容)
那是完整的格拉德尔剧本吗?您在哪里定义了copy
?您好,我已经添加了完整的任务脚本。太棒了!我的复印任务错了。我将2个副本{}重新组合成一个副本以简化它。我可以编辑您的回复吗?@rcperso,当然可以。阅读gradle是如何工作的,在某个操场上尝试一下。
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'
}
}
}
}
}
}
// Map for the version code that gives each ABI a value.
ext.abiCodes = ['armeabi':3, 'armeabi-v7a':4, 'arm64-v8a':5, 'mips':6, 'x86':7, 'x86_64':8].withDefault {0}
import com.android.build.OutputFile
android.applicationVariants.all { variant ->
def customName = ""
if (project.hasProperty('projectName')) {
customName = projectName
} else {
customName = project.name
}
def flavorName = variant.productFlavors[0].name
def buildType = variant.variantData.variantConfiguration.buildType.name
def abiVersionCode = ""
def abiName = ""
def fileName = ""
def mappingDir = "${rootDir}/build/outputs/mapping/${flavorName}/${buildType}"
variant.outputs.all { output ->
abiVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
if (abiVersionCode != null) {
output.versionCodeOverride = abiVersionCode * 1000 + variant.versionCode
}
abiName = output.getFilter(OutputFile.ABI)
if (abiName == null) {
abiName = "universal"
output.versionCodeOverride = 1 * 1000 + variant.versionCode
}
fileName = customName + "_" + variant.versionName + "-" + flavorName + "-" + abiName + "-" + buildType + "-" + output.versionCode
outputFileName = new File("${fileName}.apk")
}
variant.assemble.doLast {
variant.outputs.all { output ->
if (buildType == "release") {
def mappingFile = "${mappingDir}/mapping.txt"
def newMappingName = "${fileName}-mapping.txt"
delete "${output.outputFile.parent}/${newMappingName}"
copy {
from "${mappingFile}"
into "${rootDir}"
rename { String mappingName ->
"${output.outputFile.parent}/${newMappingName}"
}
}
}
delete "${output.outputFile.parent}/output.json"
}
}
}