又要开启一个新系列了,这个系列咱们来学习Gradle,它是一个基于JVM的新一代构建工具,关于Gradle彻底能够写一本书,这个系列会针对Android开发来对Gradle的知识进行精简讲解。Gradle目前已经应用于多个Android开发的技术体系中,好比构建系统、插件化、热修复和组件化等等,若是你不了解Gradle,那么你对于上述技术体系的了解会大打折扣。为了让你们可以更好的学习Gradle,这篇文章不会介绍Gradle具体的技术细节,而是先介绍为何如今要用Gradle?php
Gradle是一个构建工具,那么为何要用构建工具,这就须要先从项目自动化开始讲起。 在咱们开发软件时,会面临类似的状况就是,咱们须要去用IDE来进行编码,当完成一些功能时会进行编译、单元测试、打包等工做,这些工做都须要开发人员手动来实现。而通常的软件都是迭代式开发的,一个版本接着一本版本,每一个版本又可能有不少的功能,若是开发每次实现功能时都须要手动的进行编译、单元测试和打包等工做,那显然会很是耗时并且也容易出现问题,所以项目自动化应运而生,它有如下优势:html
构建工具用于实现项目自动化,是一种可编程的工具,你能够用代码来控制构建流程最终生成可交付的软件。构建工具能够帮助你建立一个重复的、可靠的、无需手动介入的、不依赖于特定操做系统和IDE的构建。这么说可能有些抽象,这里拿APK的构建过程来举例。前端
APK的构建过程能够根据官方提供的流程图以下图所示。 java
这个APK构建的过程主要分为如下几步:apache
从以上步骤能够看出,APK的构建过程是比较繁琐的,并且这个构建过程又是时常重复的,若是没有构建工具,手动去完成构建工做,无疑对于开发人员是个折磨,也会产生诸多的问题,致使项目开发周期变长。 在Gradle出现以前,有三个基于Java的构建工具:Ant、Gant和Maven,它们被应用于Java或者Android开发中,咱们来看看它们都有什么特色。编程
Ant在这里不是蚂蚁的意思(虽然它的图标是蚂蚁),而是Another Neat Tool的意思。 它是由 James Duncan Davidson 开发的(Tomcat 最初的开发者),最初是用来构建 Tomcat。在2000年,Ant成为一个独立的项目并被发布出来。Ant 是由 Java 编写的构建工具,它的核心代码是由Java编写的,所以具备平台无关性,构建脚本是XML格式的(默认为bulid.xml),若是你熟悉XML,那么Ant 就比较容易上手。缓存
Ant构建脚本的样式以下所示。服务器
bulid.xmlapp
<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="hello">
<echo message="running build.xml which is equivalent to build.gant"/>
<property file="build.properties"/>
<target name="init" description="init target" >
<echo message="Executing init target"/>
</target>
<target name="hello" depends="init" description="say hello target">
<echo message="${echo.msg}"/>
</target>
</project>
复制代码
Ant的构建脚本由三个基本元素组成:一个project(工程)、多个target(目标)和可用的task(任务)。 Apache Ant有如下缺点:maven
build.gant
Ant.echo(message : 'running build.gant')
Ant.property(file : 'build.properties')
def antProperty = Ant.project.properties target(init : 'init target') {
echo(message : 'Executing init target')
}
target(hello : 'say hello target') {
depends(init)
echo(message : antProperty.'echo.msg')
}
setDefaultTarget(hello)
复制代码
这个build.gant等同于此前Ant的bulid.xml。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
复制代码
Maven相比Ant的优势:
Maven的缺点:
Gradle是一款基于JVM的专一于灵活性和性能的开源构建工具。
apply plugin:'java'
group='com.mycompany.app'
archivesBaseName='my-app'
version='1.0-SNAPSHOT'
repositories{
mavenCentral()
}
dependencies{
testCompile 'junit:4.11'
}
复制代码
这个build.gradlet等同于此前Maven的pom.xml。能够看出Groovy编写构建脚本代码量更少,可读性更强。 下面列出Gradle与竞争对手不一样的特性。
Gradle 有很是良好的拓展性。若是你想要在多个构建或者项目中分享可重用代码,Gradle的插件会帮助你实现。将Gradle插件应用于你的项目中,它会在你的项目构建过程当中提供不少帮助:为你的添加项目的依赖的第三方库、为你的项目添加有用的默认设置和约定(源代码位置、单元测试代码位置)。其中Android Gradle插件继承Java Gradle插件,在本系列后续的文章会介绍插件的内容。
Ant和Maven的构建脚本是由XML来编写的,若是XML逻辑复杂内容太多就不容易维护。Gradle可使用Groovy DSL来实现构建脚本,Groovy 是基于Jvm一种动态语言,它的语法和Java很是类似并兼容Java,所以你无需担忧学习Groovy的成本。Groovy在Java的基础上增长了不少动态类型和灵活的特性,比起XML,Gradle更具备表达性和可读性。
Gradle提供了可配置的可靠的依赖管理方案。一旦依赖的库被下载并存储到本地缓存中,咱们的项目就可使用了。依赖管理很好的实现了在不一样的平台和机器上产生相同的构建结果。
Gradle能够为构建你的项目提供引导和默认值,若是你使用这种约定,你的Gradle构建脚本不会有几行。比起Ant,Gradle不只仅提供了约定,还可让你轻松的打破约定。
Gradle Wrapper是对Gradle 的包装,它的做用是简化Gradle自己的下载、安装和构建,好比它会在咱们没有安装Gradle的状况下,去下载指定版本的Gradle并进行构建。Gradle的版本不少,因此有可能出现版本兼容的问题,这时就须要Gradle Wrapper去统一Gradle的版本,避免开发团队由于Gradle版本不一致而产生问题。
Gradle能够和Ant、Maven和Ivy进行集成,好比咱们能够把Ant的构建脚本导入到Gradle的构建中。
Gradle显然没法知足全部企业级构建的全部要求,可是能够经过Hook Gradle的生命周期,来监控和配置构建脚本。
Gradle是一个开源的项目,它遵循了Apache License 2.0协议。Gradle的优良特性吸引了不少开发者并造成了Gradle社区,不少开源软件开发者为Gradle的核心代码作出了共享。
本篇文章从项目自动化开始讲起,介绍了经常使用的构建工具:Ant、Gant和Maven,最后介绍了Gradle的特性,这些特性和其余竞争的构建工具相比有着很大的优点和吸引力,这也是为何咱们如今要用Gradle的缘由。
感谢
《实战Gradle》
《Android Gradle权威指南》
technologyconversations.com/2014/06/18/…
www.w3cschool.cn/gradle/6qo5…
blog.csdn.net/singwhatiwa…
www.w3cschool.cn/ant/
wiki.jikexueyuan.com/project/mav…
www.raychase.net/863
blog.csdn.net/coloriy/art…
这里不只分享Android、Java和移动前端相关技术,还有行业动态、技术资讯、面经和我的感悟。