1 Gradle是一種編程框架gradle主要由以下三部分組成
1 groovy核心語法2 build script block3 gradle api注:本章任何的代碼都在
如下圖
2 Gradle的優(yōu)勢1 更加的靈巧,因?yàn)間radle是編程框架,所以功能要厲害的多2 粒度性上,源碼的編譯,資源的編譯,都是一個(gè)一個(gè)Task的,我們可以改寫task來達(dá)到細(xì)膩控制上3 擴(kuò)展性上,gradle有插件機(jī)制以上任何的優(yōu)勢其實(shí)全因?yàn)镚radle是一種編程框架
3 Gradle的生命周期Gradle生命周期分為三個(gè)部分,如下:
1 初始化階段: 分析整個(gè)工程中任何Project,構(gòu)建任何的Project對應(yīng)的project對象,這種階段主要就是分析setting.gradle文件2 配置階段:分析任何的projects對象中的task,構(gòu)建好任何的task拓?fù)鋱D,主要分析各個(gè)project下的build.gradle文件3 執(zhí)行階段:執(zhí)行詳細(xì)的的task及其依賴task如下圖
4 Gradle的生命周期的監(jiān)聽在root build.gradle中,添加如下代碼
/** * 配置階段開始前的監(jiān)聽回調(diào) */this.beforeEvaluate { ? ?println '配置階段開始111…'}/** * 配置階段后的監(jiān)聽回調(diào) */this.afterEvaluate { ? ?println '配置階段執(zhí)行完畢222…'}/** * gradle執(zhí)行完畢后的回調(diào) */this.gradle.buildFinished { ? ?println '執(zhí)行階段執(zhí)行完畢…'}//等同于 beforeEvaluatethis.gradle.beforeProject {}//等同于 afterEvaluatethis.gradle.afterProject { ? ?println '配置階段執(zhí)行完畢333…'}之后跟著運(yùn)行 ./gradlew build,就會(huì)輸出相對應(yīng)的log
5 Project詳細(xì)解答在gradle中,project就貌似是android中的activity一樣,總是使用,所以project概述是一個(gè)非常重要的概念
在android工程中,任何的lib,module都是一個(gè)project
調(diào)查任何的project
./gradlew projects//輸出如下————————————————————Root project————————————————————Root project 'gradledemo'+— Project ':app'+— Project ':mylib'+— Project ':test'— Project ':utils'
可以觀看到的目前工程下有5個(gè) proejct,之中有一個(gè)根 project,剩下的4個(gè)是子project,可以觀看到的project是樹的結(jié)構(gòu),根project的作用就是用來管理子project怎么樣管理呢?就是通過相對應(yīng)的api進(jìn)行管理,后面有講到。每一個(gè)project都對應(yīng)一個(gè)輸出
每一個(gè)project都有一個(gè)build.gradle文件,build.gradle文件也是project的標(biāo)識
5.1 Project核心api
1 gradle 生命周期api2 project有關(guān)api3 task有關(guān)api4 屬性有關(guān)api5 file有關(guān)api6 其它api在gradle中,一個(gè)build.gradle文件會(huì)被編譯成proejct字節(jié)碼,所以在build.gradle中編編輯的任何的代碼等于都是在proejct中類內(nèi)部編編輯的
輸出任何的proejct
//在根project下的build.gradle中,獲得任何的project,添加如下代碼//調(diào)用途徑getProjects()//獲得任何的projectdef getProjects(){ ? ?println '————' ? ?println 'Root Project' ? ?println '————' ? ?//getAllprojects()返回任何的Project的set集合 ? ?this.getAllprojects().eachWithIndex { Project project, int index – ?if(index == 0){ ? ? ?println “Root protject :'${project.name}'” ?}else{ ? ? ?println “+— project '${project.name}'” ?} ? ?}}//運(yùn)行 ./gradlew clean,輸出如下:————Root Project————Root protject :'gradledemo'+— project 'app'+— project 'mylib'+— project 'test'+— project 'utils'
輸出任何的子project
//在根project的build.gradle中,輸出任何的子prject//打印任何的子projectgetAllSubprojects()def getAllSubprojects(){ ? ?getSubprojects().each { project – ?println “—- ${project.name}” ? ?}}//輸出—- app—- mylib—- test—- utils獲得父project的名字
//獲得根project的名字,在根project中調(diào)用返回null,在子project下調(diào)用打印出父project的名字getParentProjectName()def getParentProjectName(){ ? ?def project = getParent() ? ?if(project != null ){ ?println “父project的名字是: ” + project.name ? ?}else { ?println '沒有父project' ? ?}}獲得根project的名字
getRootPro()def getRootPro(){ ? ?println “根project的名字是:” + getRootProject().name}//運(yùn)行 ./gradlew clean ,輸出:根project的名字是:gradledemo在根project對子project進(jìn)行配置
/** * 可以在根project下對任何的子project進(jìn)行配置,如下代碼 * 所有在子project中的build.gradle文件中可以配置的東西 * 都可以在下面的代碼中進(jìn)行配置 */project(“app”) { ? ?apply plugin: 'com.android.application' ? ?group 'com.zhj' ? ?version '1.0.0' ? ?dependencies { ? ?} ? ?android { ? ?}}project('mylib') { ? ?apply plugin: 'com.android.library' ? ?group 'com.zhj' ? ?version '1.1.1' ? ?dependencies { ? ?}}為任何的project進(jìn)行統(tǒng)一的配置
/** * 配置目前結(jié)點(diǎn)工程和它的任何的任何的subproject * 例如將任何的project的group配置為 'com.zhj' */allprojects { ? ?repositories { ?google谷歌() ?jcenter() ? ?} ? ?group 'com.zhj'}//測試在allprojects中配置的group屬性println “test工程的group是 : ” + project('test').group//輸出test工程的group是 : com.zhj只對子project進(jìn)行配置
/** * 和allprojects不一樣的是,subprojects不包括目前工程,只包括子project */subprojects { Project project – ? ?if(project.hasProperty('com.android.library')){ ?//將庫工程編譯的庫上傳到maven中 ? ?}}gradle 中對project的管理是以樹的形式進(jìn)行管理的,根project主要就是對子Project進(jìn)行管理,可以查找,可以獲得任何的子project,同一時(shí)間在子project中也完全可以獲得根proejct或者父project的消息。同一時(shí)間,一個(gè)project對應(yīng)于一個(gè)build.gradle文件,build.gradle文件也是判斷是不是project的標(biāo)志。project是非常重要的概念,下面是官網(wǎng)的文檔