如何在build.gradle中设置.apk文件名和包? Android Gradle插件3.0

时间:2017-10-30 08:30:18

标签: gradle android-gradle android-gradle-3.0

根据我的CI要求,我正在努力实现两件事:

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

我使用了android gradle插件2.3,并使用以下脚本来管理上面的任务(它适用于gradle插件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插件3.0中的最新更新):

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

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

enter image description here

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

2 个答案:

答案 0 :(得分:3)

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

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

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

根据documentation,这是不可能的:

  

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

答案 1 :(得分:-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 {}}} 部分

这将返回:

debug build:

  

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

发布版本:

  

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

不要使用 outputFileName = new File(),否则您会遇到变量API操作的问题