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

總結(jié)

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

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

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

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

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

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

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

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

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

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