【问题标题】:Execute a custom independent gradle task in android studio在android studio中执行一个自定义的独立gradle任务
【发布时间】:2015-12-30 18:24:20
【问题描述】:

我有一个包含多个模块的 android 项目。我正在尝试从其中一个模块运行自定义 gradle 任务,但每次我运行该任务时,模块中以及其他模块中的所有其他 gradle 任务都会运行。我的任务不依赖于任何其他任务。任务:

task helloTask{
   println "Hello task"
}

我已尝试通过工作室的终端窗口以及命令行运行此任务。

【问题讨论】:

    标签: android android-studio gradle android-gradle-plugin


    【解决方案1】:

    在 Android Studio 中调出 Gradle 视图(Android Studio 窗口的右上角)

    按运行 Gradle 任务(圆形按钮)。

    从模块列表中选择包含 build.gradle 的模块,然后从任务列表中选择任务。


    在 Gradle 视图树中,您的任务也会出现在 YourModule/Tasks/other 下,除非为任务明确指定了 group

    【讨论】:

      【解决方案2】:

      您可以使用运行配置来实现相同的目的。参考:https://developer.android.com/studio/run/rundebugconfig.html

      转到运行 -> 编辑配置 -> 单击 + 添加新配置 -> 从出现的列表中选择 Gradle。最后选择应用程序,然后输入您要运行的任务。 Android Studio 甚至会提供自动完成功能。

      稍后,运行该任务将作为选项直接在“运行”菜单中提供。

      【讨论】:

        【解决方案3】:

        可能是你没有给出正确的命令?

        运行独立任务的流程:

        1. 向您的app/build.gradle 文件添加一个任务。 例如:
        task helloExecution { task ->
            doLast {
                println "Hello exececuted"
            }
        }
        
        1. 导航到项目文件夹后,在终端上键入./gradlew taskName
          例如:./gradlew helloExecution

        【讨论】:

          【解决方案4】:

          Gradle 将在配置阶段执行所有未使用<< 声明的任务。如果您想将任务的执行延迟到执行阶段,那么您只需添加<<

          在你的build.gradle

          task helloConfiguration { task ->
              println "Hello configuration phase task! $task.name"
          }
          
          /* Notice the `<<` this denotes to gradle to not execute
           * the closure during the configuration phase. Instead
           * delay closure's execution till the execution phase.
           */
          task helloExecution << { task ->
              println "Hello execution phase task! $task.name"
          }
          
          helloExecution.dependsOn helloConfiguration
          

          然后在执行helloExecution 任务时,我们看到两者都在运行,并确保了顺序。接下来,如果我们只想运行配置构建的任务,我们可以单独执行,并且只运行单个任务。

          $ gradle helloExecution
          Hello configuration phase task! helloConfiguration
          Hello execution phase task! helloExecution
          :helloConfiguration UP-TO-DATE
          :helloExecution UP-TO-DATE
          
          BUILD SUCCESSFUL
          
          Total time: 0.64 secs
          
          $ gradle helloConfiguration
          Hello configuration phase task! helloConfiguration
          :helloConfiguration UP-TO-DATE
          
          BUILD SUCCESSFUL
          
          Total time: 0.784 secs
          

          即使没有提供任何任务,在配置阶段运行的任务也将始终执行,这是我希望您看到的行为。所以给出上面的例子。请注意配置任务已运行但未执行。

          $ gradle
          Hello configuration phase task! helloConfiguration
          :help
          
          Welcome to Gradle 2.10.
          
          To run a build, run gradle <task> ...
          
          To see a list of available tasks, run gradle tasks
          
          To see a list of command-line options, run gradle --help
          
          To see more detail about a task, run gradle help --task <task>
          
          BUILD SUCCESSFUL
          
          Total time: 0.651 secs
          

          因此,如果您有 5 个任务在配置阶段运行,那么无论命令行 args 尝试为执行阶段的目标调用哪个任务,您都会看到它们全部执行。

          【讨论】:

          • 我想运行一个不依赖于任何默认任务的任务。只想运行一个特定的任务,这不可能吗?
          • 如果您知道要消除哪些任务,可以在命令行中明确指定它们gradle myTask -x someTaskThatShouldNotRun
          • 不幸的是,这些答案都没有解决手头的问题。
          • 还有一点需要注意的是,&lt;&lt; 已在 Gradle 版本 3.2 中删除,以支持 doLast 发布说明:docs.gradle.org/3.2/release-notes.html
          猜你喜欢
          • 1970-01-01
          • 2020-07-15
          • 1970-01-01
          • 1970-01-01
          • 2016-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多