在 Android Gradle 构建之前执行任务?

Gradle 有没有可能先执行一项任务

gradle build

precompile这样的东西。谁来帮帮忙。这样的事情可能吗? 怎么可能?

89145 次浏览

你可以这样做:

task build << {
println 'build'
}
task preBuild << {
println 'do it before build'
}
build.dependsOn preBuild

由于这个任务 preBuild会在 build任务之前自动调用。

如果你想在配置阶段运行 preBuild(前面的例子在 execution阶段运行 preBuild) ,你可以这样做:

task build << {
println 'build'
}
build.doFirst {
println 'do it before build'
}

更多关于分级构建生命周期的信息可以在这里阅读 http://www.gradle.org/docs/current/userguide/build_lifecycle.html

对于那些想知道如何在 Android 项目中做到这一点的人来说,这对我很有用:

task myTask << {
println "here's a task"
}
preBuild.dependsOn myTask

还有一个办法

task myTask << {
println "here's a task"
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleDebug') {
task.dependsOn myTask
}

如果要运行的任务已经定义(例如 publishToMavenLocal) ,您可以使用以下方法将其添加到 gradle build任务中:

build.dependsOn publishToMavenLocal

在5.4. x 年级

// File: app/build.gradle
// See: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html
task ruby(type:Exec) {
workingDir '../'
executable = '/usr/bin/env'
args = ["ruby", "--version"]
}
preBuild.dependsOn ruby

左移操作员 <<在五年级被移除。

在我的案例中,我有一个使用 Java 子项目的 Android 项目,这个项目起作用了:

task myTask {
doLast {
println 'do it before build'
}
}


assemble.dependsOn myTask

关于最初的问题,现在应该是这样的语法:

task myTask {
doLast {
println 'do it before build'
}
}
build.dependsOn myTask
// or for Android
preBuild.dependsOn myTask

这是 Kotlin DSL(build.gradle.kts)等效于 K _ o _ 的回答:

tasks.create("MyTask") {
doLast {
println("I am the task MyTask")
}
}


tasks.build {
dependsOn("MyTask")
}


// OR another notation
// tasks.named("build") {
//     dependsOn(tasks["MyTask"])
// }

有关详细信息,请参阅 Gradle 文档: 向任务添加依赖项