jiu_jie2 2017-07-05 05:50 采纳率: 0%
浏览 1251
已结题

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文件拷贝进去,虽然不影响使用,但是大批量的生成无用的文件夹太冗余了。

  • 写回答

4条回答

  • jiu_jie2 2017-07-05 05:49
    关注

    说的更直接一点就是,如何让下面的代码只在我打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)
    }
    }
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率