【问题标题】:Execute multiple tasks before assembleRelease在 assembleRelease 之前执行多个任务
【发布时间】:2019-02-22 03:21:37
【问题描述】:

我有两个任务,一个 test-task 和一个 poeditorPull-task(它从 poeditor-api 中提取最新的字符串),我希望我的 assembleRelease-task 在两者都完成后运行。

到目前为止,我一直使用task.dependsOn,但昨天我发现gradle在poeditorPull-task完成之前完成了apk的构建

tasks.whenTaskAdded { task ->
  if (task.name == 'assembleInternalRelease' || task.name == 'assembleProductionRelease') {
    task.dependsOn('test')
    task.dependsOn('poeditorPull')
  }
}

正如我之前所说,这不是我想要的,即将任务 testpoeditorPullassemble*Release 之前排队

我该怎么办?

【问题讨论】:

    标签: android gradle android-gradle-plugin


    【解决方案1】:

    我重新表述了我的答案,使其更加简洁明了...

    问题是assemble* 任务是由 Android 插件动态创建的,因此在您的构建脚本中您不能直接引用这些任务。您应该使用afterEvaluate 块:它将在创建所有任务后执行,因此您将能够创建从“assembleInternalRelease”到您自己的任务的依赖关系

    afterEvaluate { project ->
        assembleInternalRelease.dependsOn tasks.getByName('test')
        // or tasks.getByName('assembleInternalRelease').dependsOn tasks.getByName('test')
    }
    

    【讨论】:

    • 我尝试添加以下代码gist.github.com/TormundsMember/2f74cd708e02e460fde909cc57ea4c37,gradle 无法识别任务,互联网告诉我将它们放在引号中,这意味着我现在正在使用字符串在 lambda 内。感谢您尝试提供帮助,非常感谢
    • 您收到的错误信息是什么?否则你可以尝试使用“tasks.getByName(String taskName)”,它应该可以工作(用其他语法编辑我的答案)
    • 显然,android-plugin 不知道任务assembleReleaseInternalassembleReleaseProductiongradlew tasks 仅显示 assembleRelease。我已经尝试了所有三个变体,Android Studio 中的 Android Gradle 插件无法识别其中任何一个。我猜这是android插件本身的一个错误
    • 一个建议,以确认我的假设:您可以尝试将您的初始代码块 tasks.whenTaskAdded { ... } 移动到行 apply plugin: 'com.android.application' 之前吗?它通常应该正确创建依赖项.. 待确认。
    • 它的行为与当块位于插件下方时的行为相同。我假设assemble-task 在链中为时已晚(事实上,这是执行的最后一个任务)。我想我必须参与不同的任务
    【解决方案2】:

    事实证明,代码运行良好,但由于插件异步运行,我的任务无法等待完成

    @M.Ricciuti 很抱歉浪费您的时间,不过还是谢谢

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2015-02-02
      • 2019-04-09
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      相关资源
      最近更新 更多