u014583590
jiu_jie2
2017-07-05 05:50

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

10
  • gradle
  • android-studio
  • android

我是想通过以下代码[在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条回答