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

在此处输入图像描述

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

  • 在Android项目中同时包含Joda时间和公共IO库时,会复制APK中复制的文件
  • 找不到com.android.tools.build:gradle:3.0.0
  • 致命exception:java.lang.NoClassDefFoundError:android.support.v7.appcompat.R $ layout
  • 在com.android.build.gradle.internal.api.ApplicationVariantImpl找不到属性'processManifest'
  • Android Gradle实现与CompileOnly性能
  • 将字节码转换为dex时出错:原因:java.lang.RuntimeException:exception解析类--Android studio 2.0 beta 6
  • Android - 错误:任务执行失败':app:mergeDebugResources'
  • 什么是在Android中运行unit testing的最快方法
  • 从迁移指南 :

    使用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”

    希望它能帮到你。