在Gradle 4.1中更改apk输出文件夹

时间:2017-10-28 01:56:58

标签: android gradle android-gradle build.gradle android-build

我想更改APK output folder,这就是我以前做的事情:

applicationVariants.all { variant ->
    variant.outputs.all {
        def filePath = "${rootProject.rootDir.absolutePath}/apks/${variant.name}"
        println("My Path: " + filePath)
        outputFileName = filePath
    }
}

但是,它在Gradle 4.1(Android studio 3.0预览版)中无效。它不是像上面的路径那样生成文件夹,而是在旧的debug文件夹中生成上述路径,如下图所示:

enter image description here

有人有解决方案吗?感谢。

3 个答案:

答案 0 :(得分:18)

这是一种解决方法,可在升级到gradle 4.x后保持输出路径相同。

applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "../" + outputFileName
    }
}

现在apk是在platforms / android / build / outputs / apk / android-release.apk

生成的

答案 1 :(得分:17)

来自migration guide

  

使用 Variant API 操作变体输出会被新插件破坏。它仍然适用于简单的任务,例如在构建时更改APK名称,如下所示:


    android.applicationVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "${variant.name}-${variant.versionName}.apk"
        }
    }

  

但是,涉及访问 outputFile 对象的更复杂的任务不再有效。这是因为在配置阶段不再创建特定于变体的任务。这导致插件不能预先知道所有输出,但也意味着更快的配置时间。

答案 2 :(得分:10)

我遇到了类似的问题,因为我需要在已知文件夹中输出apk而不是在文件夹中,具体取决于计算机用户名。所以我这样修好了:

applicationVariants.all { variant ->
    variant.outputs.all {
        def apk = output.outputFile;
        def newName = apk.name.replace(".apk", "-v" + variant.versionName + "-RELEASE.apk");
        newName = newName.replace("-" + variant.buildType.name, "");

        outputFileName = "./" + newName
    }
}

有了这个,我得到了apk: “... /输出/ APK / flavorName / buildTypeName / xxx.apk”

希望它对你有所帮助。