通俗的理解Gradle(转自zhihu

转载 2016年08月30日 17:11:23

软件开发讲究代码复用,通过复用可以使工程更易维护,代码量更少..... 开发者可以通过继承,组合,函数模块等实现不同程度上的代码复用.但不知你有没有想过,软件开发也是一种工程作业,绝不仅仅是写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理.....),你每天都在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等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:
依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)
方便卸载装载依赖(只是一条坐标依赖,不需要删除即可)
方便的版本管理,如上图中的2.3.3既是picasso的版本号,若改为+就表示从中央仓库中下载最新的版本
不同工程的相同依赖不会存在重复副本(只在~/.gradle下存在一份)
项目部署
通过一些插件,可以实现自动将你的输出(.jar,.apk,.war...)上传到指定仓库,自动部署...
总结:
Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.
Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能

相关文章推荐

通俗地理解Gradle

通俗地理解Gradle

通俗的理解Gradle

用Eclipse+ADT开发Android的时候,就没有思考过开发环境的原理,直接上手码代码了。现在迁移到Android Studio+Gradle,从Github上直接导入项目出现了太多问题,光是形...

如何通俗的理解Gradle?

如何通俗的理解Gradle?通俗的解释:Gradle就是用来打包的?那么问题来了,(1)为什么代码需要打包发布?(2)打包发布有几种常见的方法?(3)为什么在这些常见的方法中选择使用Gradle?等等...

如何通俗地理解 Gradle?

http://www.zhihu.com/question/30432152 我以前一直用 Eclipse with ADT 来开发Android 项目,而且对它的基础的原理掌握不深...

通俗解析IRP和I/O设备栈在内核程序中的作用(转自看雪)

正文: 言归正传,所有的I/O请求都是以IRP(I/O请求包)的形式来提交的,同时内核程序的所有分发函数(Dispatch Function)的第二个参数都是 PIRP(也即是指向IRP的指针...
  • zacklin
  • zacklin
  • 2012年04月16日 18:16
  • 2625

handler通俗说明(转自eoeandroid)

handler通俗说明(转自eoeandroid)   1、首先创建一个Handler对象,可以直接使用Handler无参构造函数创建Handler对象,也可以继承Hand...

通俗易懂之epoll--转自”知乎“

作者:蓝形参 链接:http://www.zhihu.com/question/20122137/answer/14049112 来源:知乎 首先我们来定义流的概念,一个流可以是文件,socket...

优化Android Studio/Gradle构建(转自黑马程序员)

使用Android Studio进行开,随着项目的增大,依赖库的增多,构建速度越来越慢,现在最慢要6分钟才能build一个release的安装包,在网上查找资料,发现可以通过一些配置可以加快速度,这里...

设计模式之通俗理解

  • 2016年11月10日 17:02
  • 898KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通俗的理解Gradle(转自zhihu
举报原因:
原因补充:

(最多只允许输入30个字)