我是想通过以下代码[在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文件拷贝进去,虽然不影响使用,但是大批量的生成无用的文件夹太冗余了。
说的更直接一点就是,如何让下面的代码只在我打release包,即通过调用gradle assembleFlavorRelease
的时候才执行:
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)
}
}
}
你直接加一下判断,判断buildType是Release才调用你上面的代码
productFlavors {
quwenlieqi {}
// wandoujia {}//豌豆荚
// qihu360 {}//360
// tencent {}//应用宝
// alibaba {}//阿里巴巴
// _91 {}//91助手
// baidu {}//百度
// pp {} //pp助手(UC)
// nduoa {} //N多网
// mumayi {}//木蚂蚁
// xiaomi {}//小米
// flyme {} //魅族flyme
// lenovo {}//联想
// huawei {}//华为
// gfan {} //机锋
// zhuole {} //卓乐市场
// hiapk {}//安卓市场
// tianyi {} //天翼
// wo {} //联通沃商店
// mm {} //移动mm
// jinli {} //金立奥软
// vivo {} //步步高 vivo
// oppo {} //oppo
// haixin {}//海信
// coolpad {}//酷派
// duowei {} //朵唯
// dangle {} //当乐
// jiuyou {} //UC九游
// anzhi {} //安智
// googleplay {} //谷歌商店
// sogou {} //搜狗
// chuizi {} //锤子
productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def oldFile = output.outputFile
if (variant.buildType.name.equals('release')) {
def releaseApkName = releaseTime() + '/quwenlieqi-' +
defaultConfig.versionName +
"-" +
variant.productFlavors[0].name +
"-" +
releaseTime() +
"-signed.apk"
output.outputFile = new File(oldFile.parent, releaseApkName)
}
}
}
}