Android编译工具Gradle和Buck使用对比
前面介绍了Gradle和BUCK两个编译工具的基本概念,本篇文章再来说说日常使用情况。本文不涉及配置方面的使用,毕竟大多时候配置工作是不重复的任务,具体操作可参见官方文档。这里主要讲讲日常工作会用到的使用两个工具编译,安装等操作的不同体验。
指令(Command)
指令操作是程序自动话的先决条件,两者都是基于指令来执行编译任务。其主指令分别为./gradlew和buck,然后调用子指令来执行相应的操作。
Read More →
前面介绍了Gradle和BUCK两个编译工具的基本概念,本篇文章再来说说日常使用情况。本文不涉及配置方面的使用,毕竟大多时候配置工作是不重复的任务,具体操作可参见官方文档。这里主要讲讲日常工作会用到的使用两个工具编译,安装等操作的不同体验。
指令操作是程序自动话的先决条件,两者都是基于指令来执行编译任务。其主指令分别为./gradlew和buck,然后调用子指令来执行相应的操作。
Read More →
在Twitter工作的那两年,我学习了Gradle编译Android,了解了很多Gradle的配置;在Facebook的一年里我又学习了Buck编译工具,跟Buck的开发人员有过交流。现在市场上主流的Android编译工具还是Google官方推行的Gradle,Github上很多Android开源项目也会带上Gradle文件,只有很少的项目会选用Buck。
本文就来分享一些我对两者的使用体验。不过我对编译工具的使用还停留在当做配置文件的阶段,还没有到达当做开发工具做深入自定义的程度,也没有足够的经验来总结说Gradle和Buck两个编译工具到底哪个比另一个更好,所以只能描述一些比较浅显的表层对比。
Gradle使用的语言是Groovy。为了能更好的了解Gradle,我曾特尝试学习了Groovy,它算是Java的超集,可以跟Java无缝结合,只不过Groovy加入了诸多丰富的元素来弥补Java的不足。其中一点就是Groovy的闭包形式似乎又结合了JavaScript里的概念,却又不是非常成熟,当年学习的时候没有特别能领悟其中的奥秘就中途放弃了。另一方面,Gradle实际上是Groovy提供的“领域特定语言(Domain-specific language, DSL)”,然后用Groovy的语法解析去执行。然后再读Gradle的文档了解提供的特定API,内容无比繁多。好在Google总结了Android开发需要的内容,平时也只要复制粘贴必要的内容即可。
Buck使用的语言是Python。可以在BUCK文件里书写任何Python指令来执行,比如动态配置源码范围等等。但最长使用的还是对Buck规则做一层包装来进行自定义规则。不过通过跟Buck的开发人员的交流,Buck实际上是用Java开发出来的,在编译时开启了Python环境来编译Buck。
对比Groovy和Python,前者几乎没有听到过其他的应用,深入学习不会带来其他好处,后者应用广泛,但是在Android开发上也不会有更多帮助。再者,要使用Gradle和Buck这两个编译工具,也并不需要对相应的两门语言有深入的理解,只要掌握基本使用即可。
这里的模块是指Intellij的项目模块,是为了更好的组织、测试、重用而创建的独立单元。每个模块都有它的属性:比如主模块是应用程序,此外我们会创建资源模块,Java库模块,Android库模块等等。当开发多个应用程序时,就可以引入部分模块来重用。
Read More →