Gradle 是个啥,一开始我也没弄清,官方解释是: 
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具 
那么Apache Ant和Apache Maven又是个啥?这个先忽略,那自动化建构工具呢? 
我个人狭义的理解就是软件环境部署和打包的工具,那么.net 也有CruiseControl.Net持续集成 WIX生成安装包,这是类似的东西,只是Gradle这个工具是google的亲儿子,微软在这方面就不怎么给力了,功能强大一点的都是第三方工具。但是微软有一个依赖管理工具不错,就是NuGet,这个跟Gradle的依赖管理可以媲美。

在知乎上,我找到一个解释的特别好的文章,这里贴出来,以防以后链接失效原链接

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。上面是维基上对Gradle的解释,相信一个没有接触过构建的人是不大能看明白的,当初我也是.下面是我对Gradle通俗的理解: 软件开发讲究代码复用,通过复用可以使工程更易维护,代码量更少….. 开发者可以通过继承,组合,函数模块等实现不同程度上的代码复用.但不知你有没有想过,软件开发也是一种工程作业,绝不仅仅是写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理…..),你每天都在build,clean,签名,打包,发布,有没有想过这种过程,也可以像代码一样被描述出来, 也可以被复用.举个例子我是做Android开发的,你可知道国内有n个Android市场,n个手机品牌,n个手机尺寸……,一般公司都会针对不同的市场单独发包用来统计不同渠道的下载量等情况,可能需要针对不同(品牌,尺寸等各种硬件信息)的手机做一些特殊的处理,这个时候你可以针对不同的情况单独建一个工程,或者更好一点你可以通过一些变量来控制,像这样:if(isMoto){do something} 
else if(isHuawei){do something} 
… 
差异管理但这两种解决方法都有自己的缺点,特别是前一种有极大的代码重复.后一种稍微好一点,但这种方式的差异是运行时的,不是静态的,对于moto手机上的处理逻辑对华为手机来说一点作用也没有,但这一段针对moto手机的处理逻辑也被装到了华为手机上了,通过gradle的productFlavor与buildtype可以实现静态级的差异控制可以参考如何通过Gradle实现一套代码开发不同特性的APK · ByGhui 说到前面的多渠道问题,不同的渠道一般会对应不同的渠道号,你当然可以通过修改一次打一个包这种纯手工的方式来生成你的多渠道包,但据听说国内某团购网站的Android App有100多个渠道.这里出现了什么?重复,反复的去打包而且这些包之前的差异很小(只是渠道号不同),和写代码一样我们应该复用,通过Gradle可以实现一个命令打出所有的渠道包,一个命令打出指定的渠道包.再复杂一点,你可能需要不同的渠道对应不同的签名文件,不同的icon,不同的服务器地址…这些都可以通过Gradle来方便的实现.依赖管理:做软件开发你可能需要依赖各种不同的jar,library.你当然可以通过将.jar/library工程下载到本地再copy到你的工程中,但不知你是否听说过国外有个叫中央仓库的东西,在这个仓库里你可以找到所有你能想到以及你从来没听说过的jar,aar…The Central Repository Search Engine 这里可以找到所有你需要的依赖,而你需要的只是指定一个坐标,如下:剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)方便卸载装载依赖(只是一条坐标依赖,不需要删除即可)方便的版本管理,如上图中的2.3.3既是picasso的版本号,若改为+就表示从中央仓库中下载最新的版本不同工程的相同依赖不会存在重复副本(只在~/.gradle下存在一份)项目部署这方面我没怎么接触过,但据我所知通过一些插件,可以实现自动将你的输出(.jar,.apk,.war…)上传到指定仓库,自动部署…罗哩罗嗦说了这么多,不知大家有没有理解总结一下:Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署……,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能通俗的解释肯定是不严谨的解释,不妥之处欢迎讨论.###赞同过百,放出之前相关分享的幻灯片###截止到现在(1432311622353)共收到342个赞同与感谢,再次感谢大家的支持!如果你觉得我的分享对你有帮助,请关注我! 以后我会分享更多更优质的内容给大家.说好的幻灯片在这里(是之前在letv时一次内部分享的幻灯片,内容有删减(涉及到公司具体项目的部分),此幻灯片参考了很多其它的资料,内部的链接很值得大家打开看看)

AS其实就是Intellij IDEA的安卓开发环境特供版(谷歌定制版),Intellij IDEA是有收费版本的IDE。Ant和Maven都是基于XML的构建工具,Gradle是用Groovy编写的构建工具,Groovy是JVM衍生的与JAVA语法高度兼容的动态强类型语言。Gradle通过编写一个名为build.g…

AS其实就是Intellij IDEA的安卓开发环境特供版(谷歌定制版),Intellij IDEA是有收费版本的IDE。Ant和Maven都是基于XML的构建工具,Gradle是用Groovy编写的构建工具,Groovy是JVM衍生的与JAVA语法高度兼容的动态强类型语言。Gradle通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对项目进行构建(复杂的项目也有其他文件)Gradle 脚本本质上就是Groovy脚本,只不过高度利用了groovy的语法糖,例如省略方法参数括号和省略句尾分号等,让代码看起来像DSL。所以几乎所有java和groovy支持的语法,它的脚本都支持。(使用JAVA和GROOVY的SDK应该也是没问题的)Gradle支持基于惯例的构建,并有丰富的适合不同情景下的插件库,光有官方用户手册支持的就有20多种,方便构建。Gradle里有两个基本概念:项目(projects)和任务(tasks)。项目由多个任务组成,一个项目可以理解为提供给不同设备的构建版本,如桌面版、网页版、安卓版、iOS版等等,也可以理解为一种行为,例如部署应用到生产环境。任务相当于Ant的target,可以理解成一个构建中原子性的工作,例如编译、打包、执行等。需要注意的是,Ant中他自己的命令例如javac、copy等也叫做task,但Ant的task远没有Gradle的task那么自由。Gradle的构建分两个阶段,第一阶段是设置阶段(configuration phase),分析构建脚本,处理依赖关系和执行顺序等,脚本本身也需要依赖来完成自身的分析。第二阶段是执行阶段(execution phase),此阶段真正构建项目并执行项目下的各个任务。Ant与Maven对于Gradle,前者编写容易,但功能有限,需要人工操作的过程也多;后者依托于庞大的依赖仓库,因此有着强大的外部依赖管理,但添加本地依赖并不方便,且项目不能灵活修改。而Gradle能很好地结合Ant与Maven各自的优点,可以随意的编写任务并组合成项目,直接利用Maven仓库,并且能很好的支持传递依赖和内部依赖。(本部分为个人主观意见,可能与大多数人的意见并不相同)(其实也都是别人的个人主观意见,来源于我当初搜索的Gradle相关文章内容)通俗一点类比成吃饭的话,大致就是:Ant是自己买菜洗菜烧水做饭,Maven是去饭店点餐,Gradle是3D打印食物。

你都说了要通俗的理解,那就用不着学习什么理论了,通俗着来就是了。通俗的说:gradle是打包用的。你觉得解决你的问题了吗?如果没解决,那是你的问题提得不够好。比如我猜你应该提:为什么要打包发布,打包发布有几种常见方法,为什么这些常见方法中要选gr…

你都说了要通俗的理解,那就用不着学习什么理论了,通俗着来就是了。通俗的说:gradle是打包用的。你觉得解决你的问题了吗?如果没解决,那是你的问题提得不够好。比如我猜你应该提:为什么要打包发布,打包发布有几种常见方法,为什么这些常见方法中要选gradle,等等。针对我猜的这些内容,通俗的讲是这样的:以在eclipse里面写java程序为例为什么需要打包:最初写完了,直接右键run就可以了。但是程序写完了毕竟是要发布到服务器上或者给别人用的,你第一不可能让所有要运行的人都装个eclipse,第二不可能把源代码公布给所有人。所以你需要把你的代码发布成二进制形式,让其它环境方便运行,这就是打包。为什么用ant打包的时候要做很多事,比如说配置文件中的用户名和密码,你本地开发和程序实际运行时的内容肯定不一致,所以需要有两个文件,开发的时候用一个,实际运行的时候用一个。这样每次打包的时候都要重复的做这些事,ant可以让你用xml的形式把这些事情写成脚本,然后自动运行。为什么用maven你的项目要用很多jar包,比如你写日志要用个log4j吧,连数据库要用个connector吧。这年头写程序不用个spring都不好意思出门,下载下来的spring包打开一看,密密麻麻的好几十个jar,不知道用哪个不用哪个。而且,即便是你一狠心把这些jar包都放进来,很大可能性还是不能运行,因为还要依赖其它的jar包。哪天想升级个spring小版本,所有jar包都要重来一遍,你也不记得哪些是由于spring引进来的jar包了。所以有了maven,你只要配置一下说我要用spring 3,所有jar包都给你下载好了,你直接运行就行了。赶明儿想升级版本,直接把3改成4,新的jar包也给你下载好了。然后?用了maven,jar包是方便了,但我打包的时候还是有好多事要做啊,然后你会发现maven实在是不知道怎么做这些事,于是开始怀念ant。gradle就是又能干maven的活,又能干ant的活,用groove语言写脚本,表达能力还更强。就这意思。===我也是这两天才看了两眼gradle,了解不深。简化版如下:ant可以自动化打包逻辑。maven也可以自动化打包,相比于ant,它多做的事是帮你下载jar包。但是maven的打包逻辑太死板,定制起来太麻烦,不如ant好用。gradle就是又能自动下jar包,又能自己写脚本,并且脚本写起来还比ant好用的这么个东西。

gradle是一个工程构建工具,java代码,和资源文件需要经过sdk里的一些程序如aapt等处理,才能形成apk包。gradle就是把那些步骤变得简单化。相当于eclipse中的ant吧!

一句话概括就是:依赖管理和任务执行。像Ruby里面的bundler+rake,像iOS中的cocoapods,像node中的npm+grunt.通俗的讲就是:你的项目需要哪些第三方库,它帮你把它们都下载下来,并且编译好放到指定的位置,你就直接可以import后用了。它本身是基于Apache的an…

一句话概括就是:依赖管理和任务执行。像Ruby里面的bundler+rake,像iOS中的cocoapods,像node中的npm+grunt.通俗的讲就是:你的项目需要哪些第三方库,它帮你把它们都下载下来,并且编译好放到指定的位置,你就直接可以import后用了。它本身是基于Apache的ant和maven的,但都不是特别好用,要引入一个库,还得写好多行的XML,麻烦死了。而且他们在任务执行上都比较弱,所以gradle就逐渐发展壮大了并被Google所推崇了

Gradle的概念和理解.相关推荐

  1. Spring Security 实战干货: RBAC权限控制概念的理解

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...

  2. 架构漫谈(二):认识概念是理解架构的基础

    原文:架构漫谈(二):认识概念是理解架构的基础 架 构漫谈是由资深架构师王概凯Kevin执笔的系列专栏,专栏将会以Kevin的架构经验为基础,逐步讨论什么是架构.怎样做好架构.软件架构如何落地.如 何 ...

  3. BlockChain:区块链技术基础概念综合理解——个人总结

    BlockChain:区块链技术基础概念综合理解--个人总结 目录 区块链的进阶与意义 1.区块链技术的进阶 2.区块链技术三大意义-传递价值.建立可信用环境.提高效率和降低成本 1.传递价值 2.建 ...

  4. 从进程组、会话、终端的概念深入理解守护进程

    从进程组.会话.终端的概念深入理解守护进程 一.写在前面 「守护进程」是 Linux 的一种长期运行的后台服务进程,也有人称它为「精灵进程」.我们常见的 httpd.named.sshd 等服务都是以 ...

  5. pytorch 中维度(Dimension)概念的理解

    pytorch 中维度(Dimension)概念的理解 Dimension为0(即维度为0时) 维度为0时,即tensor(张量)为标量.例如:神经网络中损失函数的值即为标量. 接下来我们创建一个di ...

  6. MVC与模板概念的理解

    MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一 ...

  7. (图形学相关数学知识)-2.对基本概念的理解(一)

    总览 总结一些在图形学中经常用到的线性代数基本概念. 主要涉及: 标量, 向量, 位置, 方向, 坐标, 矩阵, 线性变换, 线性相关, 平移, 旋转, 缩放, 仿射变换, 齐次坐标等. 标量(数字) ...

  8. 开环与闭环概念的理解

    开环与闭环概念的理解 开环与闭环是自动控制原理里面的概念,在电路设计里面也经常用到,像是运放电路,时钟电路,开关电源电路等.用是用到了,但是真的要你针对这两个概念讲出个ABCD时就.... 1 开环系 ...

  9. 数学是一门逻辑性极强的演绎科学,只有对基本概念深入理解,对基本定理和公式牢牢记住,才能找到解题的突破口和切入点。

    考研数学备考目前已进入首轮复习阶段.此阶段考生要做的是全面整理基本概念.定理.公式,初步总结复习重点,把握命题基本题型,为强化期的复习打下坚实基础. 由于数学大纲一般变化不大,因此,虽然2003年考试 ...

最新文章

  1. 单片机can通信可以接多少个设备_51单片机的多机并行通信系统应用
  2. mysql 语句 求比值_Mysql求百分比
  3. Android 导航栏如何轻松搞定
  4. HTTP简介,http是一个属于应用层的面向对象的协议
  5. C语言学习之函数调用递归问题,有5个学生坐在一起,问第5个学生多少岁?
  6. matplotlib 雷达图2
  7. 【TensorFlow-windows】keras接口——卷积核可视化
  8. iOS中有两种支持机制:Notification和KVO(Key-Value Observing)
  9. 研讨会 | “人工智能与行业知识图谱技术实战”研讨会
  10. 末日帝国——Agile公司的困境 (5)
  11. Xmind2021绿色版,思维导图最佳软件
  12. 形式语言与自动机总结
  13. 钢结构工程管理软件系统
  14. 使用VC++6.0创建.cpp文件工程
  15. python开发的项目管理软件_10 个超好用的免费开源项目管理软件
  16. 联想服务器如何重装win 2012系统,联想电脑如何重装win10操作系统
  17. 腾讯云物联网MQTT对接
  18. react通过hook实现父组件调用孙子组件方法(非redux)
  19. 【python】百度关键词排名查询实现
  20. 论c++的二分函数lower_bound

热门文章

  1. 【seaborn】jointplot 改变图片长宽比,非方形
  2. 2022年财务顾问FA行业研究报告
  3. 服务器之间如何实现网络共享
  4. 计算机考完试后感想,期中考试后的感想(精选10篇)
  5. 安装postman工具 出现请设置注册表项HKLM\Software\Microsoft\.NETFramework\InstallRoot,指向.NET Fra
  6. linux 修改pptp端口,请教pptp修改1723端口的问题
  7. 北上资金 python_股票数据抓取——北上基金持股数据(selenium抓取数据),爬取,之,北向,资金,通过...
  8. 一位浙大教授令人寒心的演讲,说出了真话!
  9. 如何在微信中打开app及Schema VS Universal Link
  10. python test suite什么意思_如何:在python中设置testsuite