返回首页 深入理解 Android 之 Gradle

Groovy 介绍

Gradle 介绍

总结

到此,我个人觉得 Gradle 相关的内容都讲完了。很难相信我仅花了 1 个小时不到的时间就为实例 2 添加了 gradle 编译支持。在一周以前,我还觉得这是个心病。回想学习 gradle 的一个月时间里,走过不少弯路,求解问题的思路也和最开始不一样:

  • 最开始的时候,我一直把 gradle 当做脚本看。然后到处到网上找怎么配置 gradle。可能能编译成功,但是完全不知道为什么。比如 NameDomainObjectContainer,为什么有 debug、release。能自己加别的吗?不知道怎么加,没有章法,没有参考。出了问题只能 google,找到一个解法,试一试,成功就不管。这么搞,心里不踏实。

  • 另外,对语法不熟悉,尤其是 Groovy 语法,虽然看了下快速教材,但总感觉一到 gradle 就看不懂。主要问题还是闭包,比如 Groovy 那一节写得文件拷贝的例子中的 withOutputStream,还有 gradle 中的 withType,都是些啥玩意啊?

  • 所以后来下决心先把 Groovy 学会,主要是把自己暴露在闭包里边。另外,Groovy 是一门语言,总得有 SDK 说明吧。写了几个例子,慢慢体会到 Groovy 的好处,也熟悉 Groovy 的语法了。

  • 接着开始看 Gradle。Gradle 有几本书,我看过 Gradle in Action。说实话,看得非常痛苦。现在想起来,Gradle 其实比较简单,知道它的生命周期,知道它怎么解析脚本,知道它的 API,几乎很快就能干活。而 Gradle In Action 一上来就很细,而且没有从 API 角度介绍。说个很有趣的事情,书中有个类似下面的例子
task myTask  <<  {
   println ' I am myTask'
}

书中说,如果代码没有加<<,则这个任务在脚本 initialization(也就是你无论执行什么任务,这个任务都会被执行,I am myTask 都会被输出)的时候执行,如果加了<<,则在 gradle myTask 后才执行。

尼玛我开始完全不知道为什么,死记硬背。现在你明白了吗????

这和我们调用 task 这个函数的方式有关!如果没有<<,则闭包在 task 函数返回前会执行,而如果加了<<,则变成调用 myTask.doLast 添加一个 Action 了,自然它会等到 grdle myTask 的时候才会执行!

现在想起这个事情我还是很愤怒,API 都说很清楚了......而且,如果你把 Gradle 当做编程框架来看,对于我们这些程序员来说,写这几百行代码,那还算是事嘛??