在学习 gradle 之前我们先要知道 gradle 是个什么东西,知道的觉得没什么,不知道的可是真没什么感念,gradle 就是自动化构建,编译工具。先不忙 gradle,我们先来看看这个自动化构建,编译工具。
项目自动化构建工具的发展
最早在开发的过程中是没有项目自动化构建这个东西的,每次编译项目的时候都是在命令行下对每个源文件执行编译命令,这种方式对于源文件不多的小项目还行,但是当项目比较大有成百上千个源文件需要编译时就比较痛苦了,所以才有了一些自动化构建工具的诞生,其本质是将一些繁琐的无须人工干预的编译流程交由机器来完成。
Makefile
最早出现的构建工具是makefile,它主要用于C/C++项目,大家会发现Android的源码里面用的就是这一套构建机制。makefile文件将程序编译,链接,装载(编译原理上的东西,不熟悉的可以去翻阅相关书籍)的流程定义成一套统一的规则。其中就包括了:哪些源文件需要编译,如何去编译,依赖的库文件,以及如何生成最终的可执行文件等等。通过这些规则去实现我们的构建需求,那么当你在编译整个工程的时候就只需要在命令行下执行一个make命令就可以搞定了,极大的提高了项目的构建效率。
Ant
ant也是一套构建工具,主要应用于Java项目(在eclipse上开发Android项目的时候用的比较多)。它是一个将软件编译,测试,部署过程组织起来自动化执行的工具。ant构建文件基于xml,每个文件对应一个唯一的project,每个project下面可以有很多的target,这些target之间存在着一定的依赖关系,当执行某个target时需要先执行该target的依赖。每个target里面又包含了一些task,task就是最终需要执行的命令。
Maven
ant虽然能大幅提高构建的效率,但是也存在一些缺点,比方说ant中的组件依赖(jar包)不能跨网络使用,为了解决这个问题,于是maven出现了,maven使用了强大的中央仓库,使得项目中使用到的一些公共组件可以很方便的联网依赖和更新,这也极大的方便了一些开源项目的使用。
Gradle
由于maven的配置过于复杂和繁琐,于是出现了我们今天的主角gradle,下面给大家看下两者配置文件的对比。
maven的配置:
<dependencies>
<dependency>
<groupId>com.crashlytics.sdk.android</groupId>
<artifactId>crashlytics</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
gradle的配置:
dependencies {
compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar')
testCompile('junit:junit:4.7')
}
看完项目自动化构建工具的发展历史,想必各位心里有点谱了,至于对这个 gradle 干的活有点理解了。