鍍金池/ 教程/ Android/ 總結(jié)
Groovy 介紹
腳本類、文件 I/O 和 XML 操作
更多
一些前提知識(shí)
Gradle 工作流程
基本組件
題外話
總結(jié)
Gradle 編程模型及 API 實(shí)例詳解
閉包
Gradle 介紹
閑言構(gòu)建
Groovy 中的數(shù)據(jù)類型

總結(jié)

到此,我個(gè)人覺得 Gradle 相關(guān)的內(nèi)容都講完了。很難相信我僅花了 1 個(gè)小時(shí)不到的時(shí)間就為實(shí)例 2 添加了 gradle 編譯支持。在一周以前,我還覺得這是個(gè)心病?;叵雽W(xué)習(xí) gradle 的一個(gè)月時(shí)間里,走過不少?gòu)澛?,求解問題的思路也和最開始不一樣:

  • 最開始的時(shí)候,我一直把 gradle 當(dāng)做腳本看。然后到處到網(wǎng)上找怎么配置 gradle??赡苣芫幾g成功,但是完全不知道為什么。比如 NameDomainObjectContainer,為什么有 debug、release。能自己加別的嗎?不知道怎么加,沒有章法,沒有參考。出了問題只能 google,找到一個(gè)解法,試一試,成功就不管。這么搞,心里不踏實(shí)。

  • 另外,對(duì)語法不熟悉,尤其是 Groovy 語法,雖然看了下快速教材,但總感覺一到 gradle 就看不懂。主要問題還是閉包,比如 Groovy 那一節(jié)寫得文件拷貝的例子中的 withOutputStream,還有 gradle 中的 withType,都是些啥玩意?。?

  • 所以后來下決心先把 Groovy 學(xué)會(huì),主要是把自己暴露在閉包里邊。另外,Groovy 是一門語言,總得有 SDK 說明吧。寫了幾個(gè)例子,慢慢體會(huì)到 Groovy 的好處,也熟悉 Groovy 的語法了。

  • 接著開始看 Gradle。Gradle 有幾本書,我看過 Gradle in Action。說實(shí)話,看得非常痛苦?,F(xiàn)在想起來,Gradle 其實(shí)比較簡(jiǎn)單,知道它的生命周期,知道它怎么解析腳本,知道它的 API,幾乎很快就能干活。而 Gradle In Action 一上來就很細(xì),而且沒有從 API 角度介紹。說個(gè)很有趣的事情,書中有個(gè)類似下面的例子
task myTask  <<  {
   println ' I am myTask'
}

書中說,如果代碼沒有加<<,則這個(gè)任務(wù)在腳本 initialization(也就是你無論執(zhí)行什么任務(wù),這個(gè)任務(wù)都會(huì)被執(zhí)行,I am myTask 都會(huì)被輸出)的時(shí)候執(zhí)行,如果加了<<,則在 gradle myTask 后才執(zhí)行。

尼瑪我開始完全不知道為什么,死記硬背?,F(xiàn)在你明白了嗎????

這和我們調(diào)用 task 這個(gè)函數(shù)的方式有關(guān)!如果沒有<<,則閉包在 task 函數(shù)返回前會(huì)執(zhí)行,而如果加了<<,則變成調(diào)用 myTask.doLast 添加一個(gè) Action 了,自然它會(huì)等到 grdle myTask 的時(shí)候才會(huì)執(zhí)行!

現(xiàn)在想起這個(gè)事情我還是很憤怒,API 都說很清楚了......而且,如果你把 Gradle 當(dāng)做編程框架來看,對(duì)于我們這些程序員來說,寫這幾百行代碼,那還算是事嘛??

上一篇:閉包下一篇:題外話