使用Gradle任务构建特定的构建风味(多个)。

8

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

目前,我的做法是:

  • 切换到构建变量A
  • 等待Gradle构建完成
  • 构建构建变量A的APK / Bundle
  • 重复以上步骤,对可用的B、C、E和D构建变量进行构建。

我想要的是一个 Gradle 任务,在运行时可以为我构建这些特定的构建变体。我知道有一个任务可以构建所有的构建变体,但这对我来说过于繁琐。

我在 StackOverflow 上搜索了一下,但没有找到任何与此相关的内容,以至于我开始认为这是不可能的。

能否有人指点一下我呢?谢谢。


也许可以通过命令行来执行? - Style-7
是的,但我在想我们该如何编写Gradle任务来生成特定构建变体的APKs / AABs。我的意思是只需一个任务即可构建5种不同的构建风格。 - amira
https://dev59.com/eWEi5IYBdhLWcg3wZ7q8#53910586 - Style-7
4个回答

0

从另一个gradle任务调用gradle任务并不是最好的选择。您应该使用mustRunAfterdependsOn等方式来描述它们之间的关系,就像所有其他gradle部分一样通常运作。对于您的目的,您可以使用GradleBuild。如果我理解得正确,我认为您正在搜索 this

我会假设您的任务将看起来像这样(添加您自己的flavors而不是我的模拟)

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

0
如果您可以使用命令行,则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 将包含所有必要的命令来

  • 切换构建变体
  • 构建
  • 打包
  • 重复

2
你能解释一下批处理文件中的命令吗? - Style-7

0

切换构建变体

enter image description here

productFlavors {
        variantA {
            dimension "version"
            versionNameSuffix ".a"
        }
       variantB {
            dimension "version"
            versionNameSuffix ".b"
        }

       variantC {
            dimension "version"
            versionNameSuffix ".c"
        }

       variantD {
            dimension "version"
            versionNameSuffix ".d"
        }

       variantE {
            dimension "version"
            versionNameSuffix ".e"
        }
    }

能否给更多的解释,@Fakhar? - amira

0

您可以使用Gradle任务。在根build.gradle中定义以下任务:

task assembleFlavorBuilds(type: GradleBuild) {
    description = 'Description of task.'
    tasks = ['assembleFlavorName1Debug', 'assembleFlavorName1Release']
}

tasks 中的每个项目都是这样的:"assemble" + FlavorName(名称的第一个字母必须大写)+ 构建类型(Debug 或 Release)。

例如,如果你有名为 "free" 和 "paid" 的 flavors,你的任务必须像这样:

task assembleFlavorBuilds(type: GradleBuild) {
    description = 'Description of task.'
    tasks = ['assembleFreeRelease', 'assemblePaidRelease']
}

同步项目后,您可以在Idea的Gradle区域中看到此任务,或者只需单击此任务旁边的运行图标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接