通俗的理解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不是一种编程语言,它不能帮你实现软件中的任何实际功能

Spring常用注解(讲解的通俗易懂,很透彻)

使用注解来构造IoC容器 用注解来向Spring容器注册Bean。需要在applicationContext.xml中注册。 如:在base-package指明一个包 1 context:compo...
  • archer119
  • archer119
  • 2016年06月07日 20:30
  • 5203

spring框架的ioc和aop通俗解释

spring框架的ioc和aop
  • white_ice
  • white_ice
  • 2016年10月19日 17:30
  • 1215

RNN的通俗讲解(初级篇)

程序媛的处女作,主要介绍机器学习中的RNN语言模型。用十分通俗的讲法讲解RNN理解中可能遇到的令人困惑的概念和计算。 (RNN初级篇)...
  • soiliml
  • soiliml
  • 2015年08月11日 15:50
  • 2986

Gradle和Maven区别(转自zhihu

Gradle和Maven都是项目自动构建工具,编译源代码只是整个过程的一个方面,更重要的是,你要把你的软件发布到生产环境中来产生商业价值,所以,你要运行测试,构建分布、分析代码质量、甚至为不同目标环境...
  • r8HZGEmq
  • r8HZGEmq
  • 2016年08月30日 18:28
  • 219

通俗理解Maven和Gradle

通俗理解Maven和GradleMaven Maven的出发点是要在Ant的基础上自动解决依赖的问题; Gradle 又号称比Maven更先进。 不过自动解决依赖的问题,对联网要求较高。...
  • qq_36461632
  • qq_36461632
  • 2017年05月23日 12:01
  • 79

如何通俗地理解 Gradle?

通俗的说:gradle是打包用的。 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传...
  • liangxiaobaiorz
  • liangxiaobaiorz
  • 2017年06月01日 20:49
  • 163

通俗的理解Gradle

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

如何通俗的理解Gradle?

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

通俗地理解Gradle

通俗地理解Gradle
  • ronaldong99
  • ronaldong99
  • 2016年12月08日 16:42
  • 214

如何通俗地理解 Gradle?

通俗的说:gradle是打包用的。 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的...
  • fjnu_se
  • fjnu_se
  • 2017年06月03日 09:10
  • 140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通俗的理解Gradle(转自zhihu
举报原因:
原因补充:

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