我是想通过以下代码[在build.gradle文件中],实现每次打release包的时候每个flavor的apk以及mapping.txt文件进行重命名并放在一个专门的文件夹下。
applicationVariants.all { variant ->
def buildType = variant.buildType.name
def relativePath = "${applicationId}.${time}_v${versionName}_${versionCode}_${buildType}" + (hasFlavors ? "_" + variant.flavorName : "")
def path = APK_OUTPUT_FILE_PATH + "/" + relativePath
if (buildType == "release") {
def myFlavor = (hasFlavors ? variant.flavorName : "")
tasks.all {
println("TASK:" + it.name)
if ("assemble" + myFlavor + "Release".equalsIgnoreCase(it.name)) {
variant.outputs.each { output ->
def appName = relativePath + ".apk"
// 通过直接修改gradle输出apk文件的字段的值来达到修改输出apk文件的目的;而不是在输出到默认文件夹后再copy
output.outputFile = new File(path, appName)
// 这段代码存在隐患--->每次gradle执行sync或者编译debug版本都会走这段代码,导致在APK目录下生成大量的文件夹!
it.doLast {
copy {
def desFile = file(path)
from "${buildDir}/outputs/mapping/${variant.dirName}/mapping.txt"
println("variant.dirName:" + variant.dirName)
into desFile
rename { String fileName ->
def desFileName = (hasFlavors ? variant.flavorName : "release") + "_" + time + "_mapping.txt"
println("desFileName:" + desFileName + ";hasFlavors: " + hasFlavors)
fileName.replace("mapping.txt", desFileName)
}
}
}
}
}
}
}
}
功能是实现了,但是问题是gradle在sync或者我打debug包的时候也会在我的目标目录下生成文件夹,并将mapping.txt文件拷贝进去,虽然不影响使用,但是大批量的生成无用的文件夹太冗余了。