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

我想更改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文件夹中生成上面的路径,如下图所示:

在此处输入图像描述

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

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

从迁移指南 :

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

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

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

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

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

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

我有一个类似的问题,因为我需要在已知文件夹中输出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:“… / outputs / apk / flavorName / buildTypeName / xxx.apk”

希望它能帮到你。