前言
根據前一篇我們學習了gradle的基礎知識和項目結構,我們知道了一個內容,就是android 的項目使用的是gradle進行項目管理,項目中最重要的就是build.gradle setting.gradle。如果需要了解gradle的內容,就需要了解gradle的執行流程,也就是gradle的生命週期。
6 gradle生命週期分析
gradle的執行過程分成了三個部分
- 1 初始化構建
- 2 配置構建
- 3 執行構建
- 4 完成構建或者失敗
6.1 初始化的工作
gradle 支持單一和多項目構建,在這個初始化的階段,gradle就根據一些機制來判斷當前構建的項目是單項目還是多項目。在android的插件裏,初始階段是根據setting.gradle 的配置來判斷的。
include ':app', ':app2', ':libery','testeclipse2as'
上面的話是我的項目中的配,include代表需要編譯的project,一共有4個項目需要參與編譯。
一句到底,就是初始化階段,就是去讀取項目的setting.gradle。項目開始構建的時候,就會創建一個gradle對象,下面的是這個對象的api和屬性。
6.2 配置構建的工作
在上面的初始化完成後,gradle知道了需要構建的各個項目,於是gradle會嘗試讀取每一個項目,並將每個項目的 build.gradle 變成一個project對象,這個project就對應了這個build.gradle文件,接着確認好項目的依賴關係,下面這個是project的文檔。
https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
gradle.afterProject( {
project ->
println("this projcet name is = "+project.getName())
println("this projcet path is = "+project.getPath())
})
afterProject 什麼意思呢?就是當gradle初始化完成後,開始執行project後會執行這個方法,我們看到這個方法接收的是一個閉包。
project這個類裏面有一個方法,叫afterEvaluate,這個方法是當這個project被執行的到時候就回調這個方法。
我們在某一個項目中的build.gradle文件中添加這個方法:
6.3 執行構建的工作
每個項目都有一個個的task(任務),每個任務之間都有相應的關係。執行構建的工作就是執行工作的任務,在執行任務的過程中,gradle會把這個任務的依賴的任務逐個執行。
上圖顯示的是當前項目所有的可執行的任務,如果我們選擇build的菜單的話,就會選擇執行構建裏面的任務。我們可以使用下面的命令來查看
./gradlew tasks --all
包括我們在android studio上面點擊的安裝按鈕。實際也是通過我們的install命令。