您当前的位置: 首页 >  gradle

科技D人生

暂无认证

  • 0浏览

    0关注

    1550博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Gradle 学习总结(1)—— Gradle 入门详解

科技D人生 发布时间:2016-09-09 10:32:04 ,浏览量:0

前言

网上关于 Gradle 的教程很多,但很多都是以“面”切入— 通过大量讲解其用法及其 API 分类来阐述。但 Gradle API 使用技巧众多,API 更是成千上百,臣妾记不住呀。个人深信,技术之道与练功之道是一致的,"想要旷世武功,先练内功"。本文尝试以“点”切入,阐述一下学习 Gradle 的门路。

为什么使用 Gradle

所谓构建,简单来说就是根据不同的输入信息,执行不同的任务,得到不同的输出的过程。而构建工具就是把这些过程自动化、管理执行不同的任务来满足不同需求。常见的构建工具有 Ant、maven 等。但它们都有一些缺点:

  • Ant 的缺点:依赖管理较弱,很容易变臃肿, XML 作为构建脚本

  • Maven 的缺点:比较精简,但限制性太多,编写插件扩展麻烦,XML 作为构建脚本。

而 Gradle 可以说是集大成者,比 Ant 语法精简, 比 Maven 灵活,抛弃了 XML 的繁琐配置,极其强大的依赖管理,基于 Groovy 动态语言而使得自定义行为十分方便。关于为什么使用 Gradle 这个问题,官方也作出了解释:

 简单翻译总结,就是使用 Gradle 很方便很灵活。

Gradle

要学好 Gradle,最重要的是学会 查文档、查文档、查文档 ...重要的事情说三遍!

Groovy

由于 Gradle 是基于 Groovy,所以要学习 Gradle,必须要掌握一定的 Groovy 基础。

Groovy 是什么

简单来说,Groovy 是拓展了 Java 语言的一种动态语言,可以作为 Java 平台的脚本语言使用,拥有类似 Python 、 Ruby 和 Smalltalk 中的一些特性。

Groovy 学习

当然,第一步肯定是配置环境,关于 Groovy 的环境搭建,具体可以参见 Groovy官网 ,特别简单,不在此重复说明。然后,创建一个 test.groovy文件,里边只有一行代码:

println  "hello groovy"

运行一下:

 是不是感觉和 python 好类似,作为一门语言,Groovy 是复杂的。要深入研究的话,不会比学任一语言要简单。但是作为一名普通开发者,个人觉得掌握其中一点—  Closure (闭包) ,足矣。

Groovy 基础

为啥这么说,首先,Groovy 是完全兼容 Java 语法的,在学习前期,你完全可以使用 Java 语法代替 Groovy 语法编写 Groovy 程序,毕竟是 Groovy 程序,随着后期对于 Groovy 越来越熟悉,自然而然就会转回更舒服的 Groovy 语法;其次,Groovy 语法真心不难,举几个常见的特殊语法:Groovy中支持动态类型,即 定义变量的时候可以不指定其类型,同一个变量可以反复赋值,而且可以是不同类型的变量 。这是动态语言和静态语言比较重要的区别。譬如,我们把上面的 test.groovy 修改为:

def test=2
test='tt'
println  "${test}"

但是这种语法早在别的动态语言,如 Python、Ruby 中出现过了,估计不知道的程序员几乎没有吧。在上面例子中,最后输出的语句 println "${test}" 其实包含了 Groovy 两个语法糖 Groovy中函数调用的时候还可以不加括号,如果字符中有$号的话,则它会把 $表达式 先求值,其实上述例子完全可以写成这样:

def test=2
test='tt'
//println  "${test}"
println(test)

还有一些别的语法,如 可以不用分号结尾 、 函数的返回值也可以是无类型 等,但这些稍微查一下 GroovyAPI文档 或google一下就懂了,没啥技术门槛。Closure(闭包):说了这么多,是时候到主角— Closure(闭包) 出场了。 Closure(闭包) 是Groovy中函数式编程的最好体现。所谓 函数式编程 跟我们熟知的 面向过程编程 、 面向对象编程 一样也是一种 "编程范式" ,也就是如何编写程序的方法论。函数式编程最鲜明的特点是 函数是“第一等公民“ ,所谓 "第一等公民" ,指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。

在Groovy中,闭包表示一段可以执行的代码块,定义如下:

{ [closureParameters -> ] statements }

其中,闭包必须使用花括号括起来,[closureParameters -> ]表示闭包参数列表,可以为空,但其为空时,闭包默认会隐含一个参数it,statements是闭包需要执行的代码,最后一行代码是返回值。定义好闭包后,可以通过 closure(参数) 或者 closure.call(参数) 调用。举个例子:

def code={123}
println  code.call(1)
println  code()
输出:
123
123

def add = { int x,y-> x+y } 
println add(3,4) 
输出:
7

def isEven = { it%2 == 0 }   
println isEven(7)
输出:
false

Closure 使用注意点:省略圆括号,在 Groovy 中我们要遍历一个 List,一般做法是这样的:

def list = [1,2,3,4,5] 
list.each{  
  println it
}

我们查一下它的 API 文档,是这样的:

method 完全跟上面写法对应不上呀,实际上是因为,当函数的最后一个参数是闭包的话,可以省略圆括号,所以上面完整写法应该是这样的:

def list = [1,2,3,4,5] 
list.each({
  println it
})

还是不对呀,明明是两个参数呀,怎么只传了一个。让我们查一下文档,这个方法定义在 DefaultGroovyMethods 中,看一下它的类说明:

This class defines new groovy methods which appear on normal JDK classes inside the Groovy environment. Static methods are used with the first parameter being the destination class, i.e. public static String reverse(String self) provides a reverse() method for String.

恍然大悟,原来这个类定义了 Groovy 环境下一些类支持的方法,而其中 定义的静态方法第一个参数仅仅是为了标示目标类 ,所以是不需要传递的。

Gradle 是什么

​Gradle 是基于 Groovy 定义了一套 DSL,所谓 DSL (领域专用语言),就是专门针对某一特定问题的计算机语言。而 Gradle 我们可以认为是经过“定制”的 Groovy,专门用于项目构建的语言。

Gradle 学习 — Task、Project 、Plugin

虽然使用 Android Studio 开发的话,Gradle 环境在 IDE 会自动下载集成,但要学好 Gradle,建议还是自己部署一下环境。从 Gradle官网 下载 gradle 后,配置一下环境变量。Gradle 的环境就搭建起来了。和 Groovy 同理,要深入 Gradle 的话,要学的东西也不会少,但是作为普通的开发者,个人觉得把三个概念搞懂就可以了: Task、Project、Plugin。

Project

在 Gradle中,每一个 project,Gradle 都会创建一个 Project 对象,并将这个对象与构建脚本相关联。也就是说, Project 对象与 build.gradle 是一对一的关系 ,所以你在 build.gradle 写的每一个配置其实就是它对应的 Project 对象的一个方法或者一个变量值,譬如说我们配置项目依赖:

dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
}

它其实对应 Project 对象 void dependencies(Closure configureClosure); 方法。从面向对象的角度去理解 Gradle,是不是觉得容易多了。

Task

Task 表示一些需要执行的构建任务,比如说lint检查任务。定义一个 Task 可以这样写:

task hello             
关注
打赏
1662604032
查看更多评论
0.0475s