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

How to set .apk file name and package in build.gradle? Android Gradle plugin 3.0

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

我使用了 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"))
        }

得到如下结构(见图):

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

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

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

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

根据 documentation 这是不可能的:

Using the Variant API to manipulate variant outputs is broken with the new plugin. It still works for simple tasks, such as changing the APK name during build time... However, more complicated tasks that involve accessing outputFile objects no longer work. That's because variant-specific tasks are no longer created during the configuration stage.

这是正确的代码:

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

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

这将 return 用于:

调试构建:

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

发布版本:

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

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