Gradle for Android系列之三 tasks
在之前第一篇文章中說過,Gradle最重要的概念是project和tasks,而一個Project也可以說只是包含了多個task的容器,所以在gradle中tasks的重要性不言而喻了。為了更好的介紹Android中常用的tasks,先來介紹task的基本知識。
我們可以在app的build.gradle檔案中定義兩個簡單task分別hello,hello1:
task hello <<{
print("hello task")
}
task hello1 {
doLast{
print("hello task")
}
}
hello中的“<<”表示追加的意思,即向hello中加入執行過程。我們還可以使用doLast來達到同樣的效果,如hello1。
同步之後,我們可以在Android Studio的Gradle標籤頁看到可以使用的task,我們定義的在other下:
雙擊相應的task,task將會邊執行,例如我們雙擊hello,那麼我們可以得到以下結果:
列印出了hello task,得到了我們想要的結果。
注:這裡我們也可以通過命令列執行gradlew tasks命令得到我們可以使用task。
從上邊的小例子可以看出,Gradle建立task還是非常自然,非常簡單的,上面的task關鍵字實際上是一個方法呼叫,該方法屬於project。project中存在多個過載的task()方法。並且我們在呼叫這些方法可以不用將引數放在括號裡面。這裡還要介紹一個概念TaskContainer,我們自定義的2個task都位於TaskContainer中,project中的tasks屬性即表示該TaskContainer。接著看下邊的例子:
task showTasks {
println tasks.class
println tasks.size()
}
該task主要列印了TaskContainer的資訊和其包含的task的數量,我們在沒有加入hello,hello1和加入之後的結果作比較:
可以看出tasks的型別為
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
在加入hello,hello1這兩個task之前tasks的size為14,加入之後為16。這裡還要說名一下計算的size是包括showTasks本身的。
在上文中我們講到,通過task()方法建立的Task都被存放在了TaskContainer中,而project又維護了一個TaskContainer型別的屬性tasks,那麼我們也可以通過create()方法直接向TaskContainer裡面新增Task:
tasks.create(name: 'hello2') <<{
print("hello2 task")
}
同時,task之間也是可以相互依賴的,例如我要定義一個hello3的task依賴hello這個task,我們可以這樣寫:
task hello3(dependsOn: hello) {
print("hello3 task");
}
關於tasks的基本知識就介紹這麼多了。下面來看一下Android 常用的tasks。從上邊的截圖我們可以清楚的看到,當建立一個Android工程時,這個工程將包含android tasks,build tasks,build setup tasks,help tasks,install tasks,verification tasks等。平時我們用的比較多是build tasks,因為它包含了apk打包相關的task:
assemble/assembleDebug/assembleRelease:針對每個版本/debug版/Release版建立一個apk。
clean :清除所有的構建任務的output,包含apk檔案
check: 執行Lint檢查並且能夠在Lint檢測到錯誤後停止執行
build :執行assemble和check
connectedCheck: 在測試機上執行所有測試任務
deviceCheck :執行所有在遠端裝置上的測試任務
installDebug和installRelease :在裝置上安裝一個Debug/Release版本
關於assemble,還要說明一點,我們還可以根據要發版的渠道定義相對應的assemble,舉個例子,我們想要在豌豆莢釋出,那麼我們可以定義一個assembleWanDouJia來輸出釋出到豌豆莢的apk。
build task依賴於check任務,但是不依賴於connectedCheck或者deviceCheck,執行check任務時Lint會產生一些相關檔案,可以在app/build/outputs中檢視。
在上文已經講過,除了上邊已經存在的task,我們還可以自己定義。這需要結合自己的需求了。Gradle For Android中的tasks就先講到這兒了,下一篇我準備將一下依賴包的管理。
相關文章
- Gradle Tips#1-tasksGradle
- Gradle系列之Android Gradle基礎配置GradleAndroid
- Gradle for Android系列之一 Gradle基礎GradleAndroid
- Gradle for Android 系列:初識 Gradle 檔案GradleAndroid
- Gradle for Android系列之二 build.gradle檔案GradleAndroidUI
- Gradle for Android系列之五 多渠道打包GradleAndroid
- Gradle for Android系列之四 依賴包管理GradleAndroid
- Gradle系列之Gradle外掛Gradle
- Gradle系列(四) Gradle外掛Gradle
- 為什麼說 Gradle 是 Android 進階繞不去的坎 —— Gradle 系列(1)GradleAndroid
- Gradle學習之三Groovy高階語法Gradle
- 寫給 Android 開發者的 Gradle 系列(一)基本姿勢AndroidGradle
- 寫給 Android 開發者的 Gradle 系列(三)撰寫 pluginAndroidGradlePlugin
- 寫給 Android 開發者的 Gradle 系列(二)撰寫 taskAndroidGradle
- Gradle系列之認識Gradle任務Gradle
- 【Android】任務和返回棧(tasks and back stack)Android
- webpack系列之三resolveWeb
- go微服務系列之三Go微服務
- oracle v$lock系列之三Oracle
- SAP PM入門系列28 - IW67 Display Tasks
- Gradle系列(三) Gradle配置構建和渠道包Gradle
- Gradle入門系列(四)——初識Gradle TaskGradle
- Tasks in parallelParallel
- Gradle系列-運用篇Gradle
- Gradle 系列部落格梳理Gradle
- Android程式(Processes)和任務(tasks)的區別Android
- Gradle系列(二) Gradle執行順序和taskGradle
- Gradle入門系列(三)——初識Gradle與ProjectGradleProject
- iOS動畫系列之三:Core AnimationiOS動畫
- 【需求解決系列之三】Android 自定義可展開收回的ExpandableTextViewAndroidTextView
- Android Gradle外掛AndroidGradle
- android Gradle錯(一)AndroidGradle
- android gradle配置指南AndroidGradle
- 其實 Gradle Transform 就是個紙老虎 —— Gradle 系列(4)GradleORM
- Gradle系列(一) Groovy 基礎Gradle
- Gradle系列-引導篇(一)Gradle
- 《Android Gradle權威指南》之Gradle入門AndroidGradle
- Android與Gradle(一):Gradle外掛開發AndroidGradle