2

根据我的 CI 要求,我试图实现两件事:

  • 以格式设置apk文件名:.apk
  • 为生成的 .apk 文件设置文件夹:app/build/outputs/apk/myBuild.apk

我使用了 android gradle plugin 2.3 并获得了以下脚本来管理上面的任务(它适用于 gradle plugin 2.3):

applicationVariants.all {
        variant ->
            variant.outputs.each { output ->
                output.outputFile = new File(
                        output.outputFile.parent,
                        variant.productFlavors.get(0).name + variant.buildType.name + ".apk")
            }

现在我得到了以下代码(根据android gradle plugin 3.0中的最新更新):

applicationVariants.all { variant ->
        variant.outputs.all { output ->
            logger.debug("fileNameParent", output.outputFile.parent)
            outputFileName = new File(
                    "apk/",
                    outputFileName.replace(".apk", "MyBuild.apk"))
        }

并得到以下结构(见图):

在此处输入图像描述

PS 我阅读了 Android Gradle Plugin 迁移指南,但它并没有帮助我实现我的目标:(

4

2 回答 2

3

问题的第一部分:如何生成文件名。

applicationVariants.all { variant ->
        variant.outputs.all { output ->
            outputFileName = new File("${variant.productFlavors.get(0).name}${variant.buildType.name}.apk")
        }

问题的第二部分:如何设置路径。

根据文档,这是不可能的:

新插件破坏了使用 Variant API 来操作变体输出。它仍然适用于简单的任务,例如在构建期间更改 APK 名称......但是,涉及访问 outputFile 对象的更复杂的任务不再起作用。这是因为在配置阶段不再创建特定于变体的任务。

于 2017-11-13T11:25:28.953 回答
-1

这是正确的代码:

applicationVariants.all { variant ->
    variant.outputs.all{
        outputFileName = outputFileName.replace("app-${variant.buildType.name}.apk", ${variant.productFlavors.get(0).name} + "-" + ${variant.buildType.name} + ".apk")
    }
}

请记住,您必须将此代码放在android{ }部分的 build.gradle 应用程序文件中,而不是android{ buildTypes{ debug/release{ }}}部分

这将返回:

调试构建:

app-debug.apk >> YOUR_PRODUCT_NAME-debug.apk

发布版本:

app-release.apk >> YOUR_PRODUCT_NAME-release.apk

不要使用outputFileName = new File()或者你有变体 API 操作的问题

于 2017-11-16T09:00:27.393 回答