1 基本概念java
gradle是一个基于Apache ant 和apache maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的xml。当前其支持的语言限于java、groovy和scala。android
我对gradle的解释:软件开发讲究代码复用,经过复用可使工程更易维护,代码量更少….. 开发者能够经过继承,组合,函数模块等实现不一样程度上的代码复用.但不知你有没有想过,软件开发也是一种工程做业,毫不仅仅是写代码,还涉及到工程的各类管理(依赖,打包,部署,发布,各类渠道的差别管理...),你天天都在build、clean,签名,打包,发布,有没有想过这种过程,也能够像代码同样被描述出来,也能够被复用。ios
举个例子我是作Android开发的,你可知道国内有n个Android市场,n个手机品牌,n个手机尺寸……,通常公司都会针对不一样的市场单独发包用来统计不一样渠道的下载量等状况,可能须要针对不一样(品牌,尺寸等各类硬件信息)的手机作一些特殊的处理,这个时候你能够针对不一样的状况单独建一个工程,或者更好一点你能够经过一些变量来控制,像这样:if(isMoto){do something}
else if(isHuawei){do something}
…apache
差别管理这两种解决方法都有本身的缺点,特别是前一种有极大的代码重复,后一种稍微好一点,但这种方式的差别是运行时的,不是静态的。对于moto手机上的处理逻辑对华为手机来讲一点做用也没有,但这一段针对moto手机的处理逻辑也被装到了华为手机上了,经过gradle的product Flavor与build type能够实现静态级的差别控制能够参考如何经过gradle实现一套代码开发不一样特性的APK。缓存
依赖管理:作软件开发你可能须要依赖不一样的jar library,你固然能够经过将.jar/library工程下载到本地再copy到你工程中,但不知道你是否据说过国外有个中央仓库的东西,在这个仓库中你能够找到全部你须要的以及你历来没据说过的jar aar...The Central Repository search engine 这里能够找到你须要的依赖,而你须要的只指定一个坐标,以下:剩下的依赖的寻找,下载,添加到classpath等你都不须要去关心,经过这种方式来维护依赖的好处有如下几点:剩下的依赖的寻找,下载,添加到classpath等你都不须要去关心,经过这种方式来维护依赖的好处有如下几点:依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)方便卸载装载依赖(只是一条坐标依赖,不须要删除便可)方便的版本管理app
。maven
总结:gradle是一种构建工具,它能够帮你管理项目中的差别、依赖、编译、打包盒部署。函数
gradle经过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本进行构建,Gradle脚本本质上就是Groovy脚本,工具
gradle里有两个基本概念:项目和任务。项目有多个任何组成,一个项目能够理解为提供给不一样设备的构建版本,如桌面版、网页版 安卓版和ios版等。能够理解为一种行为,例如部署应用到生产环境。任务至关于ant中的target。能够理解为一种构建中原子性的工做,例如 编译、打包、执行等。须要注意的是,ant中他本身的命令例如javac copy等也叫作task,但Ant的task远没有Gradle的task那么自由。gradle
gradle的构建分两个阶段,第一阶段是设置阶段,分析构建脚本,处理依赖关系和执行顺序等,脚本自己也须要依赖来完成自身的分析,第二阶段是执行阶段,此阶段正真构建项目并执行项目下的各个任务。Ant与Maven对于Gradle,前者编写容易,但功能有限,须要人工操做的过程也多;后者依托于庞大的依赖仓库,所以有着强大的外部依赖管理,但添加本地依赖并不方便,且项目不能灵活修改。而Gradle能很好地结合Ant与Maven各自的优势,能够随意的编写任务并组合成项目,直接利用Maven仓库,而且能很好的支持传递依赖和内部依赖。(本部分为我的主观意见,可能与大多数人的意见并不相同)(其实也都是别人的我的主观意见,来源于我当初搜索的Gradle相关文章内容)通俗一点类比成吃饭的话,大体就是:Ant是本身买菜洗菜烧水作饭,Maven是去饭店点餐,Gradle是3D打印食物。
2 关于项目导入androidstudio时注意事项
当须要把别的项目导入Android studio中的时候,须要注意三处地方的修改
1 整个project中的build.gradle中的 buildscript的仓库路劲 ,也就是dependencies中的classpath路劲
2 整个项目中的gradle的wrapper/gradle-warpper.properties中的distributionUrl值
3 module中的build.gradle中的compileSdkVersion和buildToolsVersion值,以及dependencies中的compile中的值