前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为什么现在要用Gradle?

为什么现在要用Gradle?

作者头像
用户1269200
发布于 2018-08-14 07:24:29
发布于 2018-08-14 07:24:29
1.4K00
代码可运行
举报
文章被收录于专栏:刘望舒刘望舒
运行总次数:0
代码可运行
前言

又要开启一个新系列了,这个系列我们来学习Gradle,它是一个基于JVM的新一代构建工具,关于Gradle完全可以写一本书,这个系列会针对Android开发来对Gradle的知识进行精简讲解。Gradle目前已经应用于多个Android开发的技术体系中,比如构建系统、插件化、热修复和组件化等等,如果你不了解Gradle,那么你对于上述技术体系的了解会大打折扣。为了让大家能够更好的学习Gradle,这篇文章不会介绍Gradle具体的技术细节,而是先介绍为什么现在要用Gradle?

1.项目自动化

Gradle是一个构建工具,那么为什么要用构建工具,这就需要先从项目自动化开始讲起。 在我们开发软件时,会面临相似的情况就是,我们需要去用IDE来进行编码,当完成一些功能时会进行编译、单元测试、打包等工作,这些工作都需要开发人员手动来实现。而一般的软件都是迭代式开发的,一个版本接着一本版本,每个版本又可能有很多的功能,如果开发每次实现功能时都需要手动的进行编译、单元测试和打包等工作,那显然会非常耗时而且也容易出现问题,因此项目自动化应运而生,它有以下优点:

  1. 它可以尽量防止开发手动介入从而节省了开发的时间并减少错误的发生。
  2. 自动化可以自定义有序的步骤来完成代码的编译、测试和打包等工作,让重复的步骤变得简单。
  3. IDE可能受到不同操作系统的限制,而自动化构建是不会依赖于特定的操作系统和IDE的,具有平台无关性。

2.构建工具

构建工具用于实现项目自动化,是一种可编程的工具,你可以用代码来控制构建流程最终生成可交付的软件。构建工具可以帮助你创建一个重复的、可靠的、无需手动介入的、不依赖于特定操作系统和IDE的构建。这么说可能有些抽象,这里拿APK的构建过程来举例。

2.1 APK的构建过程

APK的构建过程可以--根据官方提供的流程图如下图所示。

这个APK构建的过程主要分为以下几步:

  1. 通过AAPT(Android Asset Packaging Tool)打包res资源文件,比如AndroidManifest.xml、xml布局文件等,并将这些xml文件编译为二进制,其中assets和raw文件夹的文件不会被编译为二进制,最终会生成R.java和resources.arsc文件。
  2. AIDL工具会将所有的aidl接口转化为对应的Java接口。
  3. 所有的Java代码,包括R.java和Java接口都会被Java编译器编译成.class文件。
  4. Dex工具会将上一步生成的.class文件、第三库和其他.class文件编译成.dex文件。
  5. 上一步编译生成的.dex文件、编译过的资源、无需编译的资源(如图片等)会被ApkBuilder工具打包成APK文件。
  6. 使用Debug Keystore或者Release Keystore对上一步生成的APK文件进行签名。
  7. 如果是对APK正式签名,还需要使用zipalign工具对APK进行对齐操作,这样应用运行时会减少内存的开销。

从以上步骤可以看出,APK的构建过程是比较繁琐的,而且这个构建过程又是时常重复的,如果没有构建工具,手动去完成构建工作,无疑对于开发人员是个折磨,也会产生诸多的问题,导致项目开发周期变长。 在Gradle出现之前,有三个基于Java的构建工具:Ant、Gant和Maven,它们被应用于Java或者Android开发中,我们来看看它们都有什么特点。

2.2 Apache Ant

Ant在这里不是蚂蚁的意思(虽然它的图标是蚂蚁),而是Another Neat Tool的意思。 它是由 James Duncan Davidson 开发的(Tomcat 最初的开发者),最初是用来构建 Tomcat。在2000年,Ant成为一个独立的项目并被发布出来。Ant 是由 Java 编写的构建工具,它的核心代码是由Java编写的,因此具有平台无关性,构建脚本是XML格式的(默认为bulid.xml),如果你熟悉XML,那么Ant 就比较容易上手。

Ant构建脚本的样式如下所示。 bulid.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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有以下缺点:

  1. Ant无法获取运行时的信息。
  2. XML作为构建脚本的语言,如果构建逻辑复杂,那么构建脚本就会又长又难以维护。
  3. Ant需要配合Ivy(一种管理项目依赖工具),否则Ant很难管理依赖。
  4. Ant在如何组织项目结构方面没有给出任何指导,这导致Ant虽然灵活性高,但这样的灵活导致每个构建脚本都是唯一的而且很难被理解。
2.3 Gant

Gant 是一个基于Ant 的构建工具,它在Ant的基础上用Groovy写的DSL(领域特定语言)。如果用Ant 实现构建,但是不喜欢用XML来编写构建脚本或者现有的XML构建脚本很难维护和管理,那么Gant 是一个不错的选择。 Gant构建文件的样式如下所示。 build.gant

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

2.4 Apache Maven

Maven于2004年发布,它的目标是改进开发人员在使用Ant时面临的一些问题。Maven最初是为了简化Jakarta Turbine项目的构建,它经历了Maven到Maven3的发展,Maven作为后来者, 继承了Ant的项目构建功能, 同样采用了XML作为构建脚本的格式。Maven具有依赖管理和项目管理的功能,提供了中央仓库,能帮助我们自动下载库文件。 Maven的构建脚本的样式如下所示。 pom.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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的优点:

  1. Ant是过程式的,开发者需要显示的指定每个目标,以及完成该目标锁需要执行的任务。每一个项目,开发着都需要重新编写这一过程,这样会产生大量的重复。Maven是声明式的,项目的构建过程和过程中的各个阶段都由插件实现,开发者只需要声明项目的基本元素就可以了,这很大程度消除了重复。
  2. Ant本身是没有依赖管理,需要配合Ivy来管理依赖,而Maven本身就提供了依赖管理。
  3. Maven 使用约定而不是配置,它为工程提供了合理的默认行为,项目会知道去哪个目录寻找源代码以及构建运行时有那些任务去执行,如果你的项目遵从默认值,那么只需要写几行XML配置脚本就可以了。而Ant是使用配置且没有默认行为的。

Maven的缺点:

  1. Maven的提供了默认的结构和生命周期,这些可能不适合你的项目需求。
  2. 为Maven写定制的扩展过于累赘。
  3. Maven的中央仓库比较混乱,当无法从中央仓库中得到需要的类库时,我们可以手工下载复制到本地仓库中,也可以建立组织内部的仓库服务器
  4. 国内连接Maven的中央仓库比较慢,需要连接国内的Maven镜像仓库
  5. Maven缺乏文档,不便于使用和理解。

3.Gradle的特性

Gradle是一款基于JVM的专注于灵活性和性能的开源构建工具。

从上图可以看出,Gradle结合Ant和Maven等构建工具的最佳特性。它有着约定优于配置的方法、强大的依赖管理,它的构建脚本使用Groovy或Kotlin DSL编写,是Android的官方构建工具。Gradle的构建脚本的样式如下所示。 build.gradle

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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与竞争对手不同的特性。

3.1 轻松的可拓展性

Gradle 有非常良好的拓展性。如果你想要在多个构建或者项目中分享可重用代码,Gradle的插件会帮助你实现。将Gradle插件应用于你的项目中,它会在你的项目构建过程中提供很多帮助:为你的添加项目的依赖的第三方库、为你的项目添加有用的默认设置和约定(源代码位置、单元测试代码位置)。其中Android Gradle插件继承Java Gradle插件,在本系列后续的文章会介绍插件的内容。

3.2 采用了Groovy

Ant和Maven的构建脚本是由XML来编写的,如果XML逻辑复杂内容太多就不容易维护。Gradle可以使用Groovy DSL来实现构建脚本,Groovy 是基于Jvm一种动态语言,它的语法和Java非常相似并兼容Java,因此你无需担心学习Groovy的成本。Groovy在Java的基础上增加了很多动态类型和灵活的特性,比起XML,Gradle更具有表达性和可读性。

3.3 强大的依赖管理

Gradle提供了可配置的可靠的依赖管理方案。一旦依赖的库被下载并存储到本地缓存中,我们的项目就可以使用了。依赖管理很好的实现了在不同的平台和机器上产生相同的构建结果。

3.4 灵活的约定

Gradle可以为构建你的项目提供引导和默认值,如果你使用这种约定,你的Gradle构建脚本不会有几行。比起Ant,Gradle不仅仅提供了约定,还可以让你轻松的打破约定。

3.5 Gradle Wrapper

Gradle Wrapper是对Gradle 的包装,它的作用是简化Gradle本身的下载、安装和构建,比如它会在我们没有安装Gradle的情况下,去下载指定版本的Gradle并进行构建。Gradle的版本很多,所以有可能出现版本兼容的问题,这时就需要Gradle Wrapper去统一Gradle的版本,避免开发团队因为Gradle版本不一致而产生问题。

3.6 可以和其他构建工具集成

Gradle可以和Ant、Maven和Ivy进行集成,比如我们可以把Ant的构建脚本导入到Gradle的构建中。

3.7 底层API

Gradle显然无法满足所有企业级构建的所有要求,但是可以通过Hook Gradle的生命周期,来监控和配置构建脚本。

3.8 社区的支持和推动

Gradle是一个开源的项目,它遵循了Apache License 2.0协议。Gradle的优良特性吸引了很多开发者并形成了Gradle社区,很多开源软件开发者为Gradle的核心代码做出了共享。

4.总结

本篇文章从项目自动化开始讲起,介绍了常用的构建工具:Ant、Gant和Maven,最后介绍了Gradle的特性,这些特性和其他竞争的构建工具相比有着很大的优势和吸引力,这也是为什么我们现在要用Gradle的原因。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘望舒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2024最新 Gradle 入门教程
在现代软件开发中,Gradle 是一款不可忽视的项目构建工具。凭借其快速、灵活与可扩展性,它成为了 Java 开发人员、DevOps 工程师的最佳选择。本教程详细介绍了 Gradle 的安装流程、项目结构、常用命令及如何创建和构建第一个项目。无论你是 Gradle 小白还是构建工具老手,都能在此找到学习与优化 Gradle 使用的方法。通过这份指南,我们将助你快速掌握 Gradle,轻松应对 2024 年开发的构建需求。
猫头虎
2024/05/14
8720
2024最新 Gradle 入门教程
Gradle 构建:从入门到实战
本文章主要针对Gradle讲解,从入门到实战(Android Studio),让你快速上手Gradle。
陈宇明
2020/12/15
8880
Gradle 构建:从入门到实战
Gradle详解
Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具,gradle跟ant、maven一样,是一种依赖管理、自动化构建工具。但跟ant、maven不一样的是,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁、灵活,更加强大的是,gradle完全兼容maven和ivy。详细介绍可以查看官网的介绍:http://www.gradle.org/ Gradle入门 在学习Gradle之前,先看一下Groovy的介绍。 Groovy安装 G
xiangzhihong
2018/02/06
1.3K0
Gradle详解
Gradle 入门
Gradle 是一款 Google 推出的基于JVM、通用灵活的项目构建工具,支持 Maven,JCenter 多种第三方仓库;支持传递性 依赖管理、废弃了繁杂的 xml 文件,转而使用简洁的、支持多种语言(例如:java、groovy 等)的 build 脚本文件。
鱼找水需要时间
2023/02/16
7960
Gradle 入门
Gradle for Android 系列:为什么 Gradle 这么火
本文主要介绍了在 Android Studio 中使用 Gradle 进行项目构建的一些基础概念和优点。通过使用 Gradle,可以更加灵活地管理项目构建,支持多种插件和扩展,同时提高了构建的效率。同时,Gradle 还提供了丰富的 API,方便开发者进行自定义插件开发。
张拭心 shixinzhang
2018/01/05
1.5K0
Gradle for Android 系列:为什么 Gradle 这么火
Gradle简介
开始使用Android Studio与之前用Eclipse最明显的感到不同之处应该就是Gradle了。 Gradle是一个基于JVM的构建工具,它提供了: 像Ant一样,通用灵活的构建工具 强大的多工程构建支持 基于Apache Ivy的强大的依赖管理,支持maven, Ivy仓库 支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件 基于Groovy,build脚本使用Groovy编写 下面是每个模块中build.gradle 文件的初始内容: 新版本的 Android Stu
阿凯
2018/06/29
4750
Gradle入门
https://www.bilibili.com/video/BV1yT41137Y7
程序员Leo
2023/08/02
3820
Gradle入门
下一代构建工具:Gradle
今天,大多数项目都包含有多而杂的技术栈、混合的多种编程语言,并使用多种测试策略。随着敏捷实践的崛起,构建不得不更早地支持代码集成,以及频繁和简单地交付软件到测试和产品环境。
博文视点Broadview
2020/06/11
2.2K0
Gradle -- 初体验
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
宋先生
2019/07/18
1K0
Gradle -- 初体验
Gradle基础:从入门到掌握
Gradle是一个基于DSL(领域特定语言)进行声明性配置的开源构建自动化工具。它结合了Apache Ant的灵活性和Apache Maven的依赖管理功能,可以用于编译、测试、部署和发布代码。Gradle最初设计是为了Java项目,但现在它也广泛支持Kotlin、Scala、Groovy、C++等多种语言和平台。
人不走空
2024/07/13
2030
身为Java程序员,这些开源工具你一定要学会
本文主要介绍Java程序员应该在2018年学习的一些基本和高级工具。如果你是一位经验丰富的Java开发人员,拥有5到10年的经验,你可能对这些工具很熟悉,但如果不是,现在就是是开始学习这些工具的好时机。
用户1257393
2018/09/30
8770
身为Java程序员,这些开源工具你一定要学会
Gradle和Maven仓库介绍
Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。
李小白是一只喵
2021/01/21
2.2K0
漫谈依赖管理工具:从Maven,Gradle到Go
为什么要有依赖管理工具谈依赖管理之前,我们先谈谈为什么要有依赖管理工具这东西。 我们学了一种编程语言,然后写了个“Hello World”,然后宣称自己学了一门语言,这时候确实不需要关心依赖问题。 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了。 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题。 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(比如jar,dll)放置在
我是攻城师
2018/05/14
2.7K0
深入Gradle:初识构建自动化的魅力
Gradle是一个自动化构建工具,它的发展历史可以追溯到2000年初的项目构建工具演变。以下是Gradle的简要发展历史:
公众号:码到三十五
2024/03/19
2860
Gradle 入门教程(一):Gradle是什么[通俗易懂]
要解释Gradle是什么,首先要搞清楚一个名词——构建工具(Build Tool)。
全栈程序员站长
2022/09/14
12K0
Gradle 入门教程(一):Gradle是什么[通俗易懂]
java开发工具Maven、Gradle和Ant(三)
Ant是一款基于XML语言的构建工具,可以处理Java等多种语言的项目。它采用了基于任务的构建模型,可以灵活地定义任务、依赖和插件等,并支持目录扫描和条件判断等特性。
堕落飞鸟
2023/04/04
6290
Maven和Gradle对比
Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。笔者有幸见证了Maven的没落和Gradle的兴起。Maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。我们可以从这五个方面来分析一下Gradle比起Maven的先进之处。
IT大咖说
2020/02/21
3K0
Maven和Gradle对比
Android Studio的build.gradle文件使用(一)
Gradle 是一个非常先进强大的项目构建工具,它使用了一种基于 Groovy 领域的特定语言(DSL)来声明项目设置。
李小白是一只喵
2020/11/26
8260
Android Studio的build.gradle文件使用(一)
项目中常用的构建工具
最早出现的构建工具是Make,但是Make这个构建工具一般只用在C或者C++语言的构建中,那么Java语言中有哪些常见的构建工具呢?
DevOps云学堂
2019/10/18
1.5K0
Gradle Vs Maven:Java项目构建工具如何选择?
在Java项目的开发中,需要引入自动化构建工具来帮助我们管理项目的外部依赖包、项目编译、打包等工作。Gradle和Maven是Java世界中两个重要的自动化构建工具,在项目中我们在两者之间如何选择呢?两者有什么异同点呢?
IT大咖说
2020/05/19
17.1K0
Gradle Vs Maven:Java项目构建工具如何选择?
相关推荐
2024最新 Gradle 入门教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文