命令
gradle projects 查看工程項目信息
gradle tasks 查看task信息
gradle <project-path> :tasks 某個project中的 task信息 注意有冒號
gradle <task-name> 執行某個task
gradlew :app:dependencies --configuration compile //查看依賴樹
gradlew sourseSets 查看sourseSets
工作流程
image.png
- 初始化階段:準備工作,比如執行setting.gradle,按照配置創建project的層次結構
- 配置階段:解析每個project中的build.gradle文件,并繪制一個描述各個task執行順序的有向圖,為下一個執行步驟做準備
- 執行階段:執行階段
在每兩個階段中間,我們都可以添加自己的代碼,在task中添加我們的代碼,實現我們需要的額外功能。
Gradle體系介紹
Gradle對象
- 通過調用
Project.getGradle()
得到gradle的實例。
apply
void apply (map):map中每個鍵都是一個方法的名稱:包括:
- from:要應用的腳本。后面為可支持的路徑。
- plugin:需要使用的插件的id或實現類
- to:目標委托對象
ext
添加額外屬性:
- gradle.ext.<properties-name>=xxxx
ext{ <properties-name>=xxx }
Task
/Task是和Project關聯的,所以,我們要利用Project的task函數來創建一個Task
task myTask <==myTask是新建Task的名字
task myTask { configure closure }
task myType << { task action } <==注意,<<符號是doLast的縮寫
task myTask(type: SomeType)
task myTask(type: SomeType) { configure closure }
上述代碼中都用了Project的一個函數,名為task,注意:
- 一個Task包含若干Action。所以,Task有doFirst和doLast兩個函數,用于添加需要最先執行的Action和需要和需要最后執行的Action。Action就是一個閉包。
- Task創建的時候可以指定Type,通過type:名字表達。這是什么意思呢?其實就是告訴Gradle,這個新建的Task對象會從哪個基類Task派生。比如,Gradle本身提供了一些通用的Task,最常見的有Copy 任務。Copy是Gradle中的一個類。當我們:task myTask(type:Copy)的時候,創建的Task就是一個Copy Task。
- 當我們使用 task myTask{ xxx}的時候。花括號是一個closure。這會導致gradle在創建這個Task之后,返回給用戶之前,會先執行closure的內容。
- 當我們使用task myTask << {xxx}的時候,我們創建了一個Task對象,同時把closure做為一個action加到這個Task的action隊列中,并且告訴它“最后才執行這個closure”(注意,<<符號是doLast的代表)。
Script Block
- subprojects:它會遍歷posdevice中的每個子Project。在它的Closure中,默認參數是子Project對應的Project對象。由于其他SB都在subprojects花括號中,所以相當于對每個Project都配置了一些信息。
- allprojects 配置此項目及其各個子項目。
- buildscript 配置此項目的構建腳本類路徑。用來配置所依賴的classpath等信息。它的closure是在一個類型為ScriptHandler的對象上執行的。在ScriptHandler中調用repositories和dependencies兩個Script Block
- repositories 配置該項??目的存儲庫。
- dependencies 配置此項目的依賴關系。