如何在 Android 项目中使用 2021 gradle Kotlin 语法构建之前运行任务

K.R*_*.R. 5 gradle android-gradle-plugin gradle-kotlin-dsl

我读了很多这样的问题的答案,但它们都非常古老,并且在 groovy 中使用晦涩/过时的语法和/或不适合 Android 项目。

我有一个任务。

tasks.register("asd") {
  doFirst {
    exec {
Run Code Online (Sandbox Code Playgroud)

当 Android 文件中的构建开始时,如何运行它app/build.gradle.kts

我已经打印了tasksproject.tasks名字,并且我已经尝试过

tasks.named("build").dependsOn(":asd")
tasks.named("app:build").dependsOn(":asd")
tasks.named(":app:build").dependsOn(":asd")
project.tasks.named("build").dependsOn(":asd")
project.tasks.named("app:build").dependsOn(":asd")
project.tasks.named(":app:build").dependsOn(":asd")
Run Code Online (Sandbox Code Playgroud)

它要么失败,Task <name> not found in project要么什么也不做。

我尝试过doFirstdoLast但都没有(直接exec),但仍然没有。

K.R*_*.R. 6

所以我找到了正确的方法

android {
  project.tasks.preBuild.dependsOn("asd") 
}


tasks.register("asd") {
  doFirst {
    exec {}
  }
}
Run Code Online (Sandbox Code Playgroud)

:提到任务时不需要。和任务可从 访问buildpreBuild(project.)tasks

doFirst是必要的,否则会无限循环。 tasks.register允许任务在需要时运行而不是立即运行,如果我们使用create