Gradle是一個構建工具,它是用來幫助我們構建App的,構建包括編譯、打包等過程。我們可以為Gradle指定構建規則,然后它就會根據我們的“命令”自動為我們構建app。Android Studio中默認就使用Gradle來完成應用的構建。有些同學可能會有疑問:”我用AS不記得給Gradle指定過什么構建規則呀,最后不還是能搞出來個apk。“ 實際上,app的構建過程是大同小異的,有一些過程是”通用“的,也就是每個app的構建都要經歷一些公共步驟。因此,在我們在創建工程時,Android Studio自動幫我們生成了一些通用構建規則,很多時候我們甚至完全不用修改這些規則就能完成我們app的構建。
有些時候,我們會有一些個性化的構建需求,比如我們引入了第三方庫,或者我們想要在通用構建過程中做一些其他的事情,這時我們就要自己在系統默認構建規則上做一些修改。這時候我們就要自己向Gradle”下命令“了,這時候我們就需要用Gradle能聽懂的話了,也就是groovy。Groovy是一種基于JVM的動態語言,關于它的具體介紹,感興趣的同學可以文末參考”延伸閱讀“部分給出的鏈接。
我們在開頭處提到“Gradle是一種構建工具”。實際上,當我們想要更靈活的構建過程時,Gradle就成為了一個編程框架——我們可以通過編程讓構建過程按我們的意愿進行。也就是說,當我們把Gradle作為構建工具使用時,我們只需要掌握它的配置腳本的基本寫法就OK了
gradle組成
groovy語法(相當于安卓使用JAVA) build script block(點build文件) gradle api(和安卓一樣在java的基礎上還有添加了自己的api)
gradle從源碼的編譯、資源的編譯、生成一個個Task逐個執行Task;Task源碼開源
- 擴展性: 支持插件機制
- 兼容性:兼容所有ant、maven功能
也就是各種任務(Task)的執行過程
ps:任務也有依賴性,某個任務執行如果依賴其他任務,則需要執行完其他任務;再執行此任務
1、聲明周期的三個階段 (1)情景回顧
諸如Executing task xxx、Configure project、BUILD SUCCESSFUL in 0s之類的,其實這些過程就是gradle執行聲明周期的一些流程
(2)生命周期的三個階段 1、initialization:初始化階段
執行工程的setting.gradle文件
- 解析整個工程下的所有Project,構建所有的Project對應的project對象
解析所有project對象中的task,構建好所有的task拓撲圖(有向無環圖)
- 這個有向無環其實就是各個執行一個Task所依賴的其他Task而形成的一種關系
執行具體的task,及其依賴的task(先執行目標Task依賴的Task,再執行目標Task)
如上情景回顧的實例,用戶可以通過命令行輸入命令,或者通過右面的Gradle窗口的Task下雙擊Task名執行Gradle任務;執行了clean命令
觀察發現:
1、19:04:22: Executing task ‘clean’…這里開始初始化 2、Configure project :這里開始配置 3、Task :clean執行任務(clean沒有依賴其他的Task所以直接執行了clean,你如果執行build任務,或在執行前先執行build依賴的task)2、聲明周期的常見監聽方法
- tips:Project,Task,是Gradle提供的api
建立個Gradle工程
- 和建立什么Helloword項目一樣,一直next即可,建立完成后會有如下兩個點gradle文件
1、由上我們知道你執行一個任務時,會先讀取這個setting.gradle完成工程初始化、配置、然后再執行具體任務 2、在看看Build.gradle文件,其實他就是一個任務名,即Task的名字。和上文的clean一樣是一個任務。我們可以在命令行輸入 gradle build或者右面的Gradle窗口,雙擊Task先的build即可執行build任務。這時便會執行build.gradle內部的代碼的(1)初始化結束/配置開始階段的監聽
padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">this.beforeEvaluate {}
(2)配置階段完成后的監聽 this.afterEvaluate {} 1
(3)執行任務完成 this.gradle.buildFinished {} 1
(4)初始化階段開始
只需在setting.gradle 文件中寫邏輯即可,我們知道這里肯定會在初始化之前執行。
3、聲明周期監聽Demo (1)setting.gradle rootProject.name = 'Test' println("初始化階段開始")
(2)build.gradle plugins { id 'groovy' } group 'Test' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.3.11' testCompile group: 'junit', name: 'junit', version: '4.12' } //----------------------------以上為系統的,以下為我們自己寫的回調demo------------------------------------ //配置階段開始前 監聽回調 this.beforeEvaluate {} // 配置階段完成后 this.afterEvaluate { println("配置完成后") } this.gradle.buildFinished { println("執行階段執行完畢") }
4、其他常見監聽方式 //等同beforeEvaluate this.gradle.beforeProject {} //等同配置階段完成后 this.gradle.afterProject {}