Android Studio - gradle 同步后执行的任务

Android Studio - gradle task to execute after SYNC

有没有办法在与 Gradle 个文件的项目同步完成后执行一次 gradle 任务?

我已经尝试将任务依赖设置为 preBuild,正如我所见 gradle:build 在 Sync 执行时被触发。但问题是依赖似乎不起作用,任务没有执行,我必须在每次同步后手动启动任务。

这基本上就是我到目前为止所尝试过的

apply plugin: 'com.android.library'
...

task myTask {
    ...
}
gradle.projectsEvaluated {
    preBuild.dependsOn(myTask)
}

我也尝试过将任务依赖性设置为我看到触发的其他任务 (:generate{Something}),但这也没有成功。

我能做些什么来强制在每次同步后执行 gradle 任务吗? 我正在使用 Gradle 2.2.1 + Android Studio 1.0.2

最后,我成功地在每个同步事件上触发了任务。 显然 gradle.projectsEvaluated 要么在同步时根本不执行,要么在 build 任务之后执行,所以解决方案是完全摆脱它

apply plugin: 'com.android.library'
...

task myTask {
    ...
}

preBuild.dependsOn(myTask)

在 Gradle 菜单中(通常位于 Android Studio 的右上角),有一个任务列表。通过右键单击任务,可以设置 Execute After Sync.

根据docs

A Gradle build has three distinct phases

Initialization...

Configuration During this phase the project objects are configured. The build scripts of all projects which are part of the build are executed.

Execution...

我们的build.gradle 文件在配置阶段执行。任务是 class(我们在开发它们时扩展 org.gradle.api.DefaultTask)。所以让我们调用任务的 execute 方法:

task myStandaloneTask(type: MyStandaloneTaskImpl){
    println("myStandaloneTask works!")
}

// let's call our task
myStandaloneTask.execute()

task myInsideGradleTask {
    println("myInsideGradleTask works!")
}

// let's call our task
myInsideGradleTask

其中 MyStandaloneTaskImpl 是在 buildSrc 中或作为 Standalone 项目开发的任务,details

P.S。因为 Groovy

,所以 myInsideGradleTask 之后不需要使用括号 ()

不久前使用 JetBrains extended their idea gradle plugin,现在您可以编写类似

的内容
idea.project.settings {
  taskTriggers {
    afterSync tasks.getByName("myTask")
  }
}

必须应用插件,如

plugins {
  id "org.jetbrains.gradle.plugin.idea-ext" version "0.7"
}