当前位置: 首页 > 知识库问答 >
问题:

如何使用Android Gradle插件在编译前运行多个任务

宦博超
2023-03-14

我想通过Gradle运行脚本来运行任务,在编译之前运行所有任务,以自动生成运行Android应用程序的工件。

任务:

  1. 我想运行一个<代码>。cmd生成工件的文件
  2. 将生成的工件复制到Android资产文件夹

这是build.gradle模块:

task createArtifacts(type:Exec) {
    commandLine 'cmd', '/c', "$rootDir\\create-artifacts.cmd"
    workingDir "$rootDir"
}

task copyAssets(type: Copy) {
    from "$rootDir/../Artifacts/assets"
    into "src/main/assets"
}

afterEvaluate {
    android.applicationVariants.all { variant ->
        variant.javaCompiler.dependsOn[copyAssets] //How do I make this multiple in this part?
    }
}

因此,我想在copyAssets之前在afterEvaluate内部执行任务。

我的参考资料在这里。


共有2个答案

钱远
2023-03-14

我通过创建另一个名为“order”的任务来解决这个问题,并在“evaluate”后调用最后一个任务,以确保遵循顺序。

task createArtifacts(type:Exec) {
    commandLine 'cmd', '/c', "$rootDir\\create-artifacts.cmd"
    workingDir "$rootDir"
}

task copyAssets(type: Copy) {
    from "$rootDir/../Artifacts/assets"
    into "src/main/assets"
}

task order {
    dependsOn 'createArtifacts'
    dependsOn 'copyAssets'
    tasks.findByName('copyAssets').mustRunAfter 'createArtifacts'
}

afterEvaluate {
    android.applicationVariants.all { variant ->
        variant.javaCompiler.dependsOn(order)
    }
}

现在,批处理脚本在实际应用程序构建完成之前运行,因此每次构建应用程序时,我的依赖项都会更新。

百里泓
2023-03-14

假设您有默认的构建变体:调试发布

这就是我如何做我的项目:

afterEvaluate {
   if (project.hasProperty("assembleRelease")) {
      assembleRelease.dependsOn copyAssets
      copyAssets.dependsOn createArtifacts
   }
   if (project.hasProperty("assembleDebug")) {
      assembleDebug.dependsOn copyAssets
      copyAssets.dependsOn createArtifacts
   }
}
 类似资料:
  • 我有一个非常简单的构建。gradle文件包含以下内容: 我想要的是在java编译开始之前运行generateSources任务。我找到了几种解决方法,比如compileJava。dependsOn(“generateSources”),但不幸的是,它们给出了一个错误: 我不认识Gradle,也不明白这个代码出了什么问题。所以我想知道如何修复这个错误。

  • 我的gradle项目中有一个java主程序,我可以通过命令行使用gradle应用程序插件运行任务--args param new从gradle 4.9开始运行,如下所示: 我想在IntelliJ IDEA CE 2018.1中为同样的配置创建一个运行配置。 我在Run/Debug配置dilog中将任务字段指定为 当我运行这个运行配置时,我得到一个错误: 如何通过运行配置使此工作?

  • 我一直在使用<code>mvn tomcat7 maven-plugin:run-am-pl:foo</code>成功地在Tomcat中一次只运行一个项目,如下图所示。现在我想让多个模块在同一端口但不同的上下文下运行。例如,我希望: 这是我一直在使用的pom.xml片段的一个例子: 使用插件是否可以做到这一点?我正在努力寻找正确的语法来让它发挥良好的作用。当我运行命令来运行它时,它只运行它在项目层

  • 我有一个使用apache的简单程序。poi外部库以操作excel文件。我在windows环境中使用了eclipse,现在我必须用terminal在linux上编译和运行我的程序。我搜索了如何包含我需要的那些罐子,但最终出现了以下错误: 错误:无法找到或加载主类xlsToCsv。 我遵循的步骤如下: javac-cp/jars/poi-3.13-20150929。罐子:/jars/poi-ooxml

  • Jenkins管道插件如何运行并行任务 我是jenkins的初学者,我想使用管道插件在jenkins的可用从节点上并行启动一些任务。 我安装了管道插件并在下面的管道内联脚本部分中添加了。 注意:主节点和从站1是我的节点 理想情况下,第一分支和第二分支是什么???? 控制台输出: 由用户匿名[Pipeline]parallel[Pipele][firstBranch]{(Branch:firstBr

  • 问题内容: 我有一个文件和。 当我进行调试构建时,我得到: 如何将添加到基础任务?关于Java编译选项的Gradle插件用户指南无济于事。 问题答案: 我根据有关操作任务的Gradle插件用户指南和有关JavaCompile的Gradle DSL文档 找到了以下解决方案: 添加到: 应用程序变体在Gradle的配置阶段,所需的任务也不存在,因此我在执行阶段进行了修改。