Android 更改Gradle 4.1中的apk输出文件夹

Android 更改Gradle 4.1中的apk输出文件夹,android,gradle,android-gradle-plugin,build.gradle,android-build,Android,Gradle,Android Gradle Plugin,Build.gradle,Android Build,我想更改APK输出文件夹,这是我过去常做的事情: applicationVariants.all { variant -> variant.outputs.all { def filePath = "${rootProject.rootDir.absolutePath}/apks/${variant.name}" println("My Path: " + filePath) outputFileName = filePath

我想更改APK
输出文件夹
,这是我过去常做的事情:

applicationVariants.all { variant ->
    variant.outputs.all {
        def filePath = "${rootProject.rootDir.absolutePath}/apks/${variant.name}"
        println("My Path: " + filePath)
        outputFileName = filePath
    }
}
然而,它在Gradle4.1(Android studio 3.0预览版)中不起作用。它没有按照上面的路径生成文件夹,而是在旧的
debug
文件夹中生成了上面的路径,如下图所示:

有人能解决这个问题吗?谢谢。

发件人:

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

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


我有一个类似的问题,因为我需要输出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”


希望它对您有所帮助。

这是一个解决方案,可以在升级到gradle 4.x后保持输出路径不变

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

现在apk在platforms/android/build/outputs/apk/android release生成。apk

谢谢。但这意味着没有办法,对吗?对我来说,这听起来不太好。我不知道,对不起。一种肮脏的方法可能是在生成文件后使用任务移动文件。您可以设置任务,在生成完成后将文件移动到另一个位置。输出目录是否在
gradle
3和4之间更改
platforms/android/build/outputs/apk/android release.apk
platforms/android/build/outputs/release/android release.apk
。这个差异破坏了我们的构建,我们不确定它是否是Gradle。这个解决方案对我有效-看起来它应该被标记为答案。这段代码在Gradle v4.4上抛出一个异常,称为“Gradle sync failed:无法获取ApkVariantOutputImpl_装饰的未知属性'output'
output.outputFile
应更改为
outputFileName
。最后一个代码将抛出“设置输出文件名时不支持绝对路径”。我已编辑了答案以使用gradle的最新版本。这就是我要查找的。
applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "../" + outputFileName
    }
}