android studio使用gradle编译工程的时候一个问题

我是想通过以下代码[在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)
      }
    }
  }
}