Execute task before Android Gradle build?
AndroidGradlebuild.gradleGradle TaskAndroid Problem Overview
is it possible for Gradle to execute a task before calling
gradle build
Something like precompile
. Someone please help. Is something like this possible and how?
Android Solutions
Solution 1 - Android
You can do it in this way:
task build << {
println 'build'
}
task preBuild << {
println 'do it before build'
}
build.dependsOn preBuild
Thanks to that task preBuild
will be automatically called before build
task.
If you want to run preBuild
in configuration phase (previous example run preBuild
in execution
phase) you can do it in this way:
task build << {
println 'build'
}
build.doFirst {
println 'do it before build'
}
More about gradle build lifecycle can be read here http://www.gradle.org/docs/current/userguide/build_lifecycle.html.
Solution 2 - Android
For those who are wondering how to do this in an Android project, this worked for me:
task myTask << {
println "here's a task"
}
preBuild.dependsOn myTask
Solution 3 - Android
There is one more way how to do this
task myTask << {
println "here's a task"
}
tasks.whenTaskAdded { task ->
if (task.name == 'assembleDebug') {
task.dependsOn myTask
}
Solution 4 - Android
The left shift operator <<
was removed in Gradle 5.
In my case I had an Android project using a Java sub project and this worked:
task myTask {
doLast {
println 'do it before build'
}
}
assemble.dependsOn myTask
Regarding the initial question this should be the syntax now:
task myTask {
doLast {
println 'do it before build'
}
}
build.dependsOn myTask
// or for Android
preBuild.dependsOn myTask
Solution 5 - Android
In Gradle 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
Solution 6 - Android
If the task to be run is already defined (for example publishToMavenLocal
), you can add it into your gradle build
task with:
build.dependsOn publishToMavenLocal
Solution 7 - Android
This is Kotlin DSL (build.gradle.kts) equivalent of k_o_'s answer:
tasks.create("MyTask") {
doLast {
println("I am the task MyTask")
}
}
tasks.build {
dependsOn("MyTask")
}
// OR another notation
// tasks.named("build") {
// dependsOn(tasks["MyTask"])
// }
For more information see Gradle documentation: Adding dependencies to a task.