【问题标题】:Change apk output folder in Gradle 4.1在 Gradle 4.1 中更改 apk 输出文件夹
【发布时间】:2018-04-09 16:16:51
【问题描述】:

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

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

【问题讨论】:

  • gradle 3 和 4 之间的输出目录是否发生了变化? platforms/android/build/outputs/apk/android-release.apkplatforms/android/build/outputs/release/android-release.apk。这种差异正在破坏我们的构建,我们不确定它是否是 Gradle。

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


【解决方案1】:

这是升级到 gradle 4.x 后保持输出路径相同的解决方法。

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

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

【讨论】:

  • 这就是我要找的。​​span>
【解决方案2】:

来自migration guide

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

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

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

【讨论】:

  • 谢谢。但这意味着没有办法做到这一点,对吧?这对我来说听起来不太好。
  • 我不知道,抱歉。
  • 一种肮脏的做法可能是在构建文件后使用任务移动文件。
  • 您可以设置任务在构建完成后将文件移动到另一个位置。
【解决方案3】:

我遇到了类似的问题,因为我需要在已知文件夹中输出 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 v4.4 上引发异常,因为“Gradle 同步失败:无法获取 ApkVariantOutputImpl_Decorated 的未知属性‘输出’”。 output.outputFile 应改为outputFileName
  • 最后一个代码会抛出“设置输出文件名时不支持绝对路径。”
  • 我已经编辑了答案以使用最新版本的 gradle。
猜你喜欢
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多