在使用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 ...
随机推荐
-
Spring Remoting: HTTP Invoker--转
原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-http-invoker.jsp Concept Overview ...
-
ExtJS学习之路第二步:Ext.Component 和 Ext.dom.Element 的区别
让我们来初步的探讨下Ext.Component和Ext.Element的区别. jQuery偏重于DOM元素的操作 1.每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的D ...
-
九度OJ 1025 最大报销额(01背包)
题目1025:最大报销额 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2683 解决:608 题目描述: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具( ...
-
多线程方式实现Socket通信
一.首先,介绍下两类传输协议:TCP:UDP TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流 ...
-
js定时器之setTimeout的使用
之前用过定时器,只不过用的不是很多,关于js定时器,一般而言我们很容易想到setInterval和setTimeout这两种. 刚开始学js定时器时,记住了setInterval,该方法一般用于每隔多 ...
-
雷林鹏分享:YAF路由问题
这2天休年假,在家宅着学习研究了YAF框架,用YAF做过APP接口的项目,但是没有用来做过WEB方面的应用.趁着这2天在家想把博客用YAF进行一下改版,目的也想进一步学习一下YAF. 在这过程中遇到不 ...
-
运行第一个Python程序
Python的三种运行方式 交互式解释器 在终端输入python3 进入python交互式解释器 输入exit()退出交互式解释器 命令行脚本 创建python脚本 通过命令执行程序 python h ...
-
php -- 取整数
PHP取整数函数常用的四种方法,下面收集了四个函数: 经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已--主要是:ceil,floor,round,intval ceil — 进一 ...
-
[BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)
题意:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成. 的多边形面积最大.n<=2000. 先求凸包,再枚举对角线,随着对角线的斜率上升,另外两 ...
-
[HDU2829] Lawrence [四边形不等式优化dp]
题面: 传送门 思路: 依然是一道很明显的区间dp 我们设$dp\left[i\right]\left[j\right]$表示前$j$个节点分成了$i$块的最小花费,$w\left[i\right]\ ...