gradle构建工具
在使用android studio开发android程序时,as就是基于gradle进行构建的,我们只需要通过run就可以编译、打包、安装,非常方便,但是究竟gradle是什么呢?
一、java构建工具
首先,我们得知道什么是构建工具。实际上,构建工具是一个可编程的工具,它可以帮助我们执行有序的任务,实现工程的自动化,而减少甚至避免不必要的手动操作,即构建工具是一个工具,它就是解放生产力,提高效率的。 在前端中,webpack就是一个构建工具,它不仅仅可以打包,还可以完成测试、热更新、部署、检查、优化等一些列的任务,从而实现了开发的工程化,提高了效率。
在java中,下面几种构建工具也都是常用的:
- Ant - Ant的核心是由Java来编写的,采用xml作为构建脚本,它基于任务链思想,任务之间定义依赖,形成先后顺序,然后去逐一完成。但是,XML来定义构建脚本,会使得脚本非常臃肿,因为XML太大了,除非是很小的项目,大的项目让我们很难去维护。就像前后端数据传输原来使用xml,而如今使用的时json一样,都是由于xml的缺点太过明显。
- Maven - Maven是常常用到的,包括现在,很多java工程师也在广泛使用。Maven构建工具的开发团队就是意识到了Ant的缺陷,采用了标准的项目布局和统一的生命周期,采用约定配置的思想,减少构建脚本需要的编写内容,其社区活跃,可以方便找到合适的插件,是一个非常强大的依赖管理工具。但是Maven使用的也是xml,并且使用默认的结构和生命周期太限制,编写插件扩展也麻烦。
- Gradle - 它结合了前两者的优点,具有ant的强大和灵活,也有Maven的生命周期管理且易于使用。另外,Gradle没有使用xml而是用基于Groovy的DSL,所以Gradle构建脚本比Ant和Maven更简洁清晰并且其代码很少,因为DSL被设计用于解决特定额问题,贯穿软件的生命周期,从编译到静态检查到测试到打包和部署。
二、Gradle
之前介绍到Gradle是基于ant和maven的更为方便使用的构建工具,并且提到了它是基于groovy的,而DSL是什么呢?
DSL即Domain Specific Language(领域专用语言),它的基本思想就是“求专不求全”,即DSL就是用于构架工具的,而不是为了进行数值计算等,它的目的很单一,仅仅是专门针对某一特定问题的计算机语言。
Groovy和java的语法很像,但它是一种动态语言,和java一样,运行在java虚拟机中,所以我们可以认为是Groovy扩展了java语言,下面就是java、Groovy和jre的关系:
实际上,Groovy Code在真正执行的时候,其实已经变成了java字节码,所以JVM根本不知道自己运行的是Groovy代码。
三、Gradle工作流程
下图可以用来阐述Gradle的工作流程:
即Gradle工作包含了三个阶段:
- 初始化阶段(Initialization phase)。对于通过as创建的项目来说,就是执行了settings.gradle。
- 初始化阶段的下一阶段就是配置阶段(Configuration phase)。 它的目标是解析每个project中的build.gradle。
- 最后一个阶段就是执行阶段(Exection phase)。
注意每个阶段之后我们都可以有hook去执行自定义函数。
参考文章:https://blog.csdn.net/Innost/article/details/48228651
gradle构建工具的更多相关文章
- AS Gradle构建工具与Android plugin插件【大全】
Android plugin version 与 gradle version 的关系 Gradle是一种构建工具,它通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对 ...
- Android Gradle 构建工具(Android Gradle Build Tools)是什么?
转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...
- Android NDK开发 Android Studio使用新的Gradle构建工具配置NDK环境(一)
本文主要讲述了如何如何在Android Studio使用新的Gradle构建工具配置NDK环境,现在把相关的步骤整理出来分享给Android程序员兄弟们,希望给他们在配置NDK环境时带来帮助. 从An ...
- 一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5
译者地址:[翻]一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5 原文:First Look at New Android Gradle Build To ...
- gradle 构建工具,与Ant Maven关系
1 基本概念 gradle是一个基于Apache ant 和apache maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的xml.当前其支持 ...
- [Gradle] Gradle 构建工具的未来
转载地址:http://www.infoq.com/cn/news/2011/04/xxb-maven-6-gradle Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你 ...
- Gradle 构建工具
参考文章: 作者:ghui 链接:https://www.zhihu.com/question/30432152/answer/48239946 来源:知乎 著作权归作者所有.商业转载请联系作者获得授 ...
- 大神所写的深度好文---Gradle 构建工具
什么是构建工具? 我们大家都知道 Gradle 是一种构建工具,那么什么是构建工具呢? 网上一大堆的文字解释我觉得很难理解,这里我以咱们 Android 开发来举个例子吧. 我们以前开发都是用 Ecl ...
- Gradle构建工具从入门到精通(IDEA)
1.Gradle安装 官网下载压缩包,然后解压,配置本地环境变量.主要有下面两个: GRADLE_HOME 是解压后的目录, GRADLE_USER_HOME 的作用是让其他程序检测到本地.gradl ...
随机推荐
- s4-8 虚拟局域网
虚拟局域网(VLAN) VLAN:一组逻辑上的设备或用户. VLAN的实现 基于端口 基于MAC地址 基于三层协议 IEEE 802.1Q 标准 1998年颁布 一种幁标记方法:V ...
- 1、JavaScript 基础一 (从零学习JavaScript)
1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十二之铭文升级版
铭文一级: ======Pull方式整合 Flume Agent的编写: flume_pull_streaming.conf simple-agent.sources = netcat-sources ...
- iOS程序的执行顺序 和 UIViewController的生命周期
iOS程序的执行顺序 1 进入程序的入口 进入main函数, 设置AppDelegate称为函数的代理 2 程序完成加载 -[AppDelegate application:didFinishLau ...
- java理论学时第七节。课后作业。
对AboutException.java的理解.在try中如果发出某类系统识别的错误,会以throw的形式抛出,在catch中可以将其截获,不显示在前端,可以选择执行别的代码. ArrayIndexO ...
- 引用数据类型(Scanner类、Random类)
Scanner类 Scanner类是引用数据类型的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固 ...
- request.getScheme() 使用方法
今天在看代码时,发现程序使用了 request.getScheme() .不明白是什么意思,查了一下.结果整理如下: 1.request.getScheme() 返回当前链接使用的协议:一般应用返回h ...
- hdu 5094 状压bfs+深坑
http://acm.hdu.edu.cn/showproblem.php?pid=5094 给出n*m矩阵 给出k个障碍,两坐标之间存在墙或门,门最多10种,状压可搞 给出s个钥匙位置及编号,相应的 ...
- [Chrome_Error] (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING 与 nginx 502 bad gateway
Chrome 浏览器出现这个错误,还出现 nginx 502 bad gateway . 查看 nginx 的 error.log : 2015/12/18 14:34:44 [error] 1448 ...
- Delphi 内进行音量控制及静音
unit UMute; interface uses MMSystem, Dialogs; Type TDeviceName = (Master, Microphone, WaveOut, Syn ...