Gradle 构建工具

参考文章:

  作者:ghui
  链接:https://www.zhihu.com/question/30432152/answer/48239946
  来源:知乎
  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Gradle是一个基于Apache AntApache Maven概念的项目自动化建构工具。它使用一种基于Groovy特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于JavaGroovyScala,计划未来将支持更多的语言。

上面是维基上对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 这里可以找到所有你需要的依赖,而你需要的只是指定一个坐标,如下:
<img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL3BpYzQuemhpbWcuY29tLzg4ODNkNGI3NThiMjg4YTc0ZWI0YzEwNGRiODU0YzVmX2IuanBn.jpg" data-rawwidth="330" data-rawheight="24" class="content_image" width="330">剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:

  1. 依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)
  2. 方便卸载装载依赖(只是一条坐标依赖,不需要删除即可)
  3. 方便的版本管理,如上图中的2.3.3既是picasso的版本号,若改为+就表示从中央仓库中下载最新的版本
  4. 不同工程的相同依赖不会存在重复副本(只在~/.gradle下存在一份)

项目部署
这方面我没怎么接触过,但据我所知通过一些插件,可以实现自动将你的输出(.jar,.apk,.war...)上传到指定仓库,自动部署...
罗哩罗嗦说了这么多,不知大家有没有理解
总结一下:

  1. Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.
  2. Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能

通俗的解释肯定是不严谨的解释,不妥之处欢迎讨论.
###
赞同过百,放出之前相关分享的幻灯片
###
截止到现在(1432311622353)共收到342个赞同与感谢,再次感谢大家的支持!如果你觉得我的分享对你有帮助,请关注我! 以后我会分享更多更优质的内容给大家.
说好的幻灯片在这里
(是之前在letv时一次内部分享的幻灯片,内容有删减(涉及到公司具体项目的部分),此幻灯片参考了很多其它的资料,内部的链接很值得大家打开看看)

时间: 2024-10-27 10:35:45

Gradle 构建工具的相关文章

一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5

译者地址:[翻]一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5 原文:First Look at New Android Gradle Build Tools: The new DSL structure and Gradle 2.5 双语对照地址: [翻-双语]一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5 翻译: MrFu 校验: MrFu Android Studio 1.3 的平台已经接近于稳

Android Studio使用新的Gradle构建工具配置NDK环境

从Android Studio 1.3 Beta1开始,就支持了NDK.不过使用的是一个全新的实验性的gradle构建工具.官方地址http://tools.android.com/tech-docs/new-build-system/gradle-experimental,英文好的可以直接看原文. 在进行配置前请先将Android Studio更新至最新版本,目前最新版本是1.4 Bata4 并且使用Android Studio内置的SDK管理器下载NDK. 或者在项目上右键打开Project

Android Gradle 构建工具(Android Gradle Build Tools)是什么?

转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5 原文:First Look at New Android Gradle Build Tools: The new DSL structure and Gradle 2.5 双语对照地址: [翻-双语]一览新的 Android Gradle 构建工

采用gradle构建工具创建第一个基于jersey的Rest服务

REST是一种跨平台.跨语言的架构风格,RESTful Web Service是REST风格在Web领域的实现,JAX-RS标准是Java语言对RESTful Web Service的规范,Jersey是JAX-RS的参考实现,也是Java EE参考实现项目GlassFish的子项目:REST架构风格中各种抽象对象被描述为资源,资源的瞬时状态称为representation且可用XML/JSON/Atom等格式表示.RESTful Web Servcie也可以分解为类似MVC的三层结构,即资源.

Gradle构建工具简明教程(IDEA篇)

1.Gradle安装 官网下载压缩包,然后解压,配置本地环境变量.主要有下面两个: GRADLE_HOME 是解压后的目录, GRADLE_USER_HOME 的作用是让其他程序检测到本地.gradle文件夹的位置, 再把 %GRADLE_HOME%\bin 追加到 Path 环境变量中. 然后在D:\.gradle目录下新建init.gradle文件,使用记事本打开粘贴下列代码: allprojects{ repositories { def REPOSITORY_URL = 'http://

使用Gradle构建工具开发Kotlin Web应用程序

1.安装Gradle 下载地址https://gradle.org/install.笔者使用的Gradle下载地址链接: http://pan.baidu.com/s/1gf9qyC7 密码: u3k6.注意Gradle要求jdk1.7或更高 下载后的zip包如下 将zip包解压,在F盘新建一个Gradle目录(新建目录的位置自定义)用来放置解压后的文件夹,然后将gradle-3.5文件夹复制到F:\Gradle下 配置Gradle环境变量,在系统环境变量path中追加F:\Gradle\gra

Android Studio Gradle构建脚本

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. 构建工具就是对你的项目进行编译,运行,签名,打包,依赖,管理等一系列功能的合集,传统的构建工具有Make,Ant,Maven,lvy等, 而Gradle是新一代自动化构建工具,它是一个独立的项目,与AS,Android无关. 在项目的根目录有个build.gradle文件,里面有这么一句代码: classpath 'com.

构建工具的发展及Android Gradle快速上手

前话: 最近谷歌宣布官方不再维护Eclipse ADT了,之后将更加专注于Android Studio的功能和性能上的改进,早在2013年的Google IO大会上首次推出了Android Studio,当时刚出来的时候我就好奇的去下载体验了一下,想看一下新开发工具的优势在哪里,据官方介绍,最吸引我的一点就是使用Studio使用了Gradle编译系统,可以支持很灵活的定制需求,而我当时正在研究当成库使用的APK(就是现在的aar文件,不过当时还没有出身),刚好遇到了ADT编译系统的限制,所以当时

Gradle与Makefile构建工具的对比

随着Android Studio的普及,越来越多的Android开发者也要开始了解和学习Gradle这款强大的代码构建工具了.我们在学习和了解一项新事物的时候,最快速的方法往往是与已知的事物进行比较,对于熟悉Makefile编译机制的Linux程序员而言,认识和掌握Gradle最好的方法莫过于比较它们之间的区别了,本文不准备详细介绍Gradle的方方面面,而是希望通过与Makefile的对比帮助Gradle初学者更快速地理解Gradle的基础和原理. Makefile是一种管理和编译 Linux