【问题标题】:Gradle task to take a build of specific build flavors (more than one)Gradle 任务以构建特定的构建风格(多个)
【发布时间】:2022-08-13 16:39:55
【问题描述】:

在我的应用程序中,我有 30 多个构建变体。每次发布应用程序时,我都需要将其发布到不同的平台,因此我构建了 5 个不同的构建变体。

目前,我正在这样做:

  • 切换到构建变体 A
  • 等待 Gradle 构建
  • 构建 APK/Bundle 的构建变体 A
  • B、C、E 和 D 的步骤相同。

我正在寻找的是一个 Gradle 任务,当我运行它时它只会为我构建这些特定的构建变体。我知道有一项任务是构建所有构建变体,但这对我来说太多了。

我搜索了 SO,但找不到与我开始认为不可能的点相关的任何内容。

有人能指出我正确的方向吗?谢谢。

  • 也许通过命令行来做?
  • 是的,但我在考虑如何编写为特定构建变体生成 apk/aabs 的 Gradle 任务。我的意思是一个单一的任务来构建 5 个构建风格。

标签: android gradle gradlew android-build gradle-task


【解决方案1】:

从另一个 gradle 任务调用一个 gradle 任务并不是最好的主意。您应该描述它们的关系,因为它通常与所有其他 gradle 部分一起使用 - 通过使用 mustRunAfterdependsOn 等等。出于您的目的,您可以使用GradleBuild。我认为您正在搜索this - 如果我的观点正确:D

我会假设你的任务看起来像那样(添加你的口味而不是我的嘲笑)

task assembleFlavourBuilds(type: GradleBuild) {
    description = 'creating flavour builds for the provided config'
    tasks = ['assembleFree', 'assemblePro']
}

【讨论】:

    【解决方案2】:

    如果您可以使用命令行,那么 Gradle 对此有很好的支持。

    例如 :

    task makeDir(type: Exec) {
        workingDir "."
        commandLine("cmd", "/c", "mkdir", "example")
    }
    

    我只是想通过在此处创建一个名为 example 的文件夹来展示其工作原理的示例。

    您甚至可以使用已定义的任务将其添加为自动化,例如 build 任务。这可以通过使用finalizeBy 来完成

    tasks.named("build") { finalizedBy("makeDir") }

    这只会在成功构建后调用任务。

    我的建议是使用所有需要的命令创建一个.bat 文件,并以与以下代码相同的方式调用它:

    task BuildAll(type: Exec) {
        workingDir "."
        commandLine("cmd", "/c", "mybat.bat")
    }
    

    mybat.bat 将包含所有需要的命令

    • 切换构建变体
    • 构建
    • 捆绑
    • 重复

    【讨论】:

    • 你能解释批处理文件中的命令吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多