在看文章以前,但願知其因此然的同窗確定但願能看到gradle相關的api,那麼先行奉上gradle api的連接:html
https://docs.gradle.org/current/javadoc/allclasses-noframe.htmljava
因爲gralde使用的是groovy語言,因此語法看上去比較奇怪,好像描述性語言同樣,不過,這對於建立一個工程來講已經足夠了。android
同其餘的語言同樣,groovy語言也有不少關鍵字,也有類型,task也是groovy語言中的一個類,配合內部的一些屬性方法和固有的關鍵字,咱們能夠寫出形形色色的task,來幫助咱們作一些自動化的操做。api
建立一個最簡單的task應該是這樣的:數組
task print{ print 'hello world' }
task還提供了設置多個task之間的相互依賴關係,就能夠用dependson關鍵字,若是任務不是你定義的,而是系統定義的,你想指定運行的前後順序,也能夠用mustRunAfter指定app
task a(dependson:taskb){//能夠寫在括號內 println "i am a" } task a(dependson:[taskb,taskc]){//也能夠以數組的形式依賴多個數組 println "i am a" } task a{//也能夠分開寫 println "i am a" dependson taskb dependson taskc }
build.mustRunAfter clean//android studio爲咱們定義好的task build 和clean 咱們能夠拿來直接使用
更進一步,配合上最經常使用的doFirst,doLast和dependson咱們能夠寫出如下四個taskgradle
task task2{
println "task2"
}
task task3{
println "task3"
}
task task4{
println "task4"
}
task task1(dependsOn:[task2,task3,task4]){
println "task1"
doFirst{
println "task1 first"
}
doLast{
println "task1 last"
}
}
task1 <<{
println "task1 append"
}
//輸出結果
task2
task3
task4
task1
task1 first
task1 last
task1 append
能夠看到,優先順序爲depensOn>本身>doFirst>doLast> ">>符號"ui
不僅是順序,使用標準的task api,咱們能夠建立形形色色的任務,完成咱們的需求this
task showTasks{ println tasks.class println tasks.size() } //output class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated 15//能夠看到,tasks.size()是build下的任務總數,但其實,目錄中全部的任務都是project的任務,詳情見附圖
例如 你想在project build以前作一些拷貝so的操做:
project.preBuild.doFirst{
delete "../sdk/src/main/jniLibs/arm64-v8a"
copy{
from "../models/armeabi-v7a"
include "**.so"
into "../sdk/src/main/jniLibs/armeabi-v7a"
rename {
String fileName ->
"libss.so"
}
}
}//執行gradle preBuild時候,就會執行拷貝文件的操做
task hello {
doFirst{
println description//輸出this is hello
}
}
hello.configure {//定義hello的屬性
description = "this is hello"
}
但若是修改hello的定義爲以下:
task hello {
println description //輸出null,能夠看到description的定義要在默認體和doFirst之間
}
經常使用的基本是這麼多,若是有進一步需求,能夠參考官方apispa