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 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)