gradle學(xué)習(xí)心得

gradle是目前android開發(fā)中必備的一款構(gòu)建工具,一直以來自己都只是照的網(wǎng)上的代碼對(duì)gradle里面的內(nèi)容進(jìn)行copy,完全不懂里面的含義昔穴,加上最近在看熱修復(fù)過程中,多次強(qiáng)調(diào)要先掌握gradle剧蚣,所以就花時(shí)間將gradle先研究了一遍支竹。

1旋廷、gradle是什么?

gradle是一款基于Groovy的DSL礼搁,他是一個(gè)用來提供各種構(gòu)建的腳本框架饶碘。

2、gradle的結(jié)構(gòu)

在gradle中馒吴,最重要的3個(gè)個(gè)概念是project扎运、task和action,每一次構(gòu)建至少包含一個(gè)project饮戳,每一個(gè)project包含至少一個(gè)task豪治,task是整個(gè)構(gòu)建的最小單元,action是task里面的具體執(zhí)行對(duì)象扯罐。在android里面负拟,每一個(gè)builde.gradle代表一個(gè)project。

3歹河、構(gòu)建生命周期

初始化:project的實(shí)例會(huì)在這個(gè)階段被創(chuàng)建掩浙,如果一個(gè)項(xiàng)目有多個(gè)模塊,并且都有對(duì)應(yīng)的build.gradle文件秸歧,那么就會(huì)用settings.gradle配置好所有的projcet厨姚,然后創(chuàng)建里面的所有project。

配置:解析project對(duì)象键菱,并創(chuàng)建task對(duì)象谬墙,然后將所有task的關(guān)系確定,形成一個(gè)有向無環(huán)圖纱耻。

執(zhí)行:執(zhí)行之前創(chuàng)建的task任務(wù)芭梯,根據(jù)之前建立好的關(guān)系去執(zhí)行,我們做的很多操作弄喘,如編譯玖喘、clean、install等蘑志,實(shí)際上都是在執(zhí)行一個(gè)task累奈,然后根據(jù)有向無環(huán)圖執(zhí)行一系列的task。

4急但、gradle對(duì)象

當(dāng)我們創(chuàng)建project的時(shí)候澎媒,實(shí)際上是將build.gradle腳本生成了一個(gè)project對(duì)象,這個(gè)project對(duì)象是來自于gradle對(duì)象中波桩,所有的project對(duì)象都是由一個(gè)gradle對(duì)象管理戒努。之前的生命周期都可以通過gradle對(duì)象在每一個(gè)周期執(zhí)行完成后,做一些我們自己想要的事情镐躲,來達(dá)到想要的效果储玫。

5侍筛、project對(duì)象

每一個(gè)build.gradle文件都會(huì)轉(zhuǎn)換成一個(gè)Project對(duì)象。在Gradle術(shù)語中撒穷,Project對(duì)象對(duì)應(yīng)的是BuildScript匣椰。

Project包含若干Tasks。另外端礼,由于Project對(duì)應(yīng)具體的工程禽笑,所以需要為Project加載所需要的插件,比如為Java工程加載Java插件蛤奥。其實(shí)佳镜,一個(gè)Project包含多少Task往往是插件決定的。

所以喻括,在Project中邀杏,我們要:

加載插件,然后不同插件有不同的行話唬血,即不同的配置望蜡。我們要在Project中配置好,這樣插件就知道從哪里讀取源文件等拷恨,最后設(shè)置屬性脖律。

6、task介紹

一個(gè)Task包含若干Action腕侄。所以小泉,Task有doFirst和doLast兩個(gè)函數(shù),用于添加需要最先執(zhí)行的Action和需要和需要最后執(zhí)行的Action冕杠。Action就是一個(gè)閉包微姊。

Task創(chuàng)建的時(shí)候可以指定Type,通過type:名字表達(dá)分预。這是什么意思呢兢交?其實(shí)就是告訴Gradle,這個(gè)新建的Task對(duì)象會(huì)從哪個(gè)基類Task派生笼痹。比如配喳,Gradle本身提供了一些通用的Task,最常見的有Copy 任務(wù)凳干。Copy是Gradle中的一個(gè)類晴裹。當(dāng)我們:task myTask(type:Copy)的時(shí)候,創(chuàng)建的Task就是一個(gè)Copy Task救赐。

當(dāng)我們使用 task myTask{ xxx}的時(shí)候涧团。花括號(hào)是一個(gè)closure。這會(huì)導(dǎo)致gradle在創(chuàng)建這個(gè)Task之后少欺,返回給用戶之前喳瓣,會(huì)先執(zhí)行closure的內(nèi)容。

當(dāng)我們使用task myTask << {xxx}的時(shí)候赞别,我們創(chuàng)建了一個(gè)Task對(duì)象,同時(shí)把closure做為一個(gè)action加到這個(gè)Task的action隊(duì)列中配乓,并且告訴它“最后才執(zhí)行這個(gè)closure”(注意仿滔,<<符號(hào)是doLast的代表)。

總結(jié):這些都是我個(gè)人通過查閱資料對(duì)于gradle的理解犹芹,在這里強(qiáng)烈推薦http://blog.csdn.net/innost/article/details/48228651這篇文章崎页,里面講解的非常仔細(xì),在學(xué)習(xí)的過程中腰埂,我從最開始看的一頭霧水到最后慢慢能看懂一點(diǎn)一點(diǎn)飒焦,再到最后能完全明白,覺得這篇講解的非常十分細(xì)致屿笼。另外如果是沒有接觸過gradle的牺荠,可以先看《gradle for android》來入門,至少對(duì)里面的一些配置做一些了解驴一,了解groovy的語法后休雌,就能看懂里面具體的內(nèi)容是在做什么。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肝断,一起剝皮案震驚了整個(gè)濱河市杈曲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胸懈,老刑警劉巖担扑,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趣钱,居然都是意外死亡涌献,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門羔挡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洁奈,“玉大人,你說我怎么就攤上這事绞灼±酰” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵低矮,是天一觀的道長印叁。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么轮蜕? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任昨悼,我火速辦了婚禮,結(jié)果婚禮上跃洛,老公的妹妹穿的比我還像新娘率触。我一直安慰自己,他們只是感情好汇竭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布葱蝗。 她就那樣靜靜地躺著,像睡著了一般细燎。 火紅的嫁衣襯著肌膚如雪两曼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天玻驻,我揣著相機(jī)與錄音悼凑,去河邊找鬼。 笑死璧瞬,一個(gè)胖子當(dāng)著我的面吹牛户辫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彪蓬,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼寸莫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了档冬?” 一聲冷哼從身側(cè)響起膘茎,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酷誓,沒想到半個(gè)月后披坏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盐数,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年棒拂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玫氢。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帚屉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漾峡,到底是詐尸還是另有隱情攻旦,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布生逸,位于F島的核電站牢屋,受9級(jí)特大地震影響且预,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烙无,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一锋谐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧截酷,春花似錦涮拗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至灾部,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惯退,已是汗流浹背赌髓。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留催跪,地道東北人锁蠕。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像懊蒸,于是被迫代替她去往敵國和親荣倾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 參考資料:http://gold.xitu.io/post/580c85768ac247005b5472f9htt...
    zhaoyubetter閱讀 10,984評(píng)論 0 6
  • 這篇文章講給大家?guī)韌radle打包系列中的高級(jí)用法-自己動(dòng)手編寫gradle插件骑丸。我們平常在做安卓開發(fā)時(shí)舌仍,都會(huì)在...
    呆萌狗和求疵喵閱讀 15,976評(píng)論 22 80
  • Gradle是基于Groovy的動(dòng)態(tài)DSL,而Groovy是基于JVM的通危,Groovy的語法和Java很類似铸豁。 C...
    HoooChan閱讀 7,455評(píng)論 0 7
  • Groovy :是一種動(dòng)態(tài)語言。 1:這種語言比較有特點(diǎn)菊碟,它和 Java 一樣节芥,也運(yùn)行于 Java 虛擬機(jī)中。簡單...
    PeytonWu閱讀 1,551評(píng)論 0 1
  • Gradle簡介 Gradle是一個(gè)構(gòu)建工具逆害,同時(shí)它也是一個(gè)編程框架头镊。 當(dāng)你把Gradle當(dāng)構(gòu)建工具看的時(shí)候,我們...
    Rangethan閱讀 2,314評(píng)論 1 8