Android Studio Grade Groovy语言入门篇

Gradle系列分2章
上篇Android Gradle Groovy自动化构建入门篇
下篇Android Gradle Groovy自动化构建进阶篇html

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各类繁琐配置。java

为何要学习它

咱们知道主流的的构建工具备Ant,Maven,那咱们为何还要学习Gradle那?编程

  • Ant 只负责 编译、测试、打包
  • Maven 新增依赖管理、发布,采用xml管理,xml配置项目大的话,容易啰嗦和臃肿
  • Gradle 采用Groovy管理,具备更高的灵活性和可扩展性。 因此咱们颇有必要一块来学习一下。

手动安装Gradle

1.确保已安装JDK,在终端运行api

$ java -version
	java version "1.8.0_121"	
复制代码

2.从Gradle官网下载最新Gradle,而后解压. 3.配置环境变量
* Linux和MacOS用户 配置您的PATH环境变量以包含bin解压缩分发的目录: $ export PATH=$PATH:/opt/gradle/gradle-4.4.1/bin
* Windows用户 点击:个人电脑- 属性-高级属性 —环境变量, 选择下 CLASSPATH,而后编辑。添加 C:\Gradle\gradle-4.4.1\bin,点击保存。 * 验证安装 执行$ gradle -v 若是出现了相似一下界面,bash

------------------------------------------------------------
Gradle 4.4.1
------------------------------------------------------------ 
复制代码

那么恭喜你,你已安装成功,接下来咱们就从Gradle的 基本语法开始,一块儿来揭开Gradle的神秘面纱吧。闭包

Groovy基本语法理论介绍

前面咱们知道Gradle是一种基于Groovy语言(DSL)来声明的,因此咱们颇有必要先了解下Groovy 语言。Groovy 语言是用于Java虚拟机的敏捷语言,是能够用于面对对象编程,又能够用做纯粹的脚本语言,同时有具备闭包和动态语言的其余特性。app

基本特性:

1. Groovy 彻底兼容java语法
2. 末尾的分号是可选的
3. 类、方法默认是public的
4. 编译器会自动添加getter/setter方法
5. 属性能够用.号获取
6. 最后一个表达式的值会做为返回值的
7. ==等同于equals(),不会有NullPointerExceptions
复制代码

高效特性

1. assert 断言语句 能够写在任何地方
2. 可选类型定义,至关于若类型语言 ,类型会自动推导出来的
3. 可选的括号 ,方法如过有有参数,()能够不写
4. 字符串 有三种 分别为 ''""''' '''
5. 闭包
复制代码

Groovy 经常使用api

打开Ide工具新建工程,选择new -- project —依次点击 函数

D4FA8425-0201-4DC5-8045-5BF238E3ECF2.png
EEEB527E-6D12-40B8-AE4C-E9CDE8FF8A3E.png

基本特性:

Snip20180114_3.png

高效特性

Snip20180114_4.png
闭包是一种代码块,叫作Closure,这是一种相似于C语言中函数指针的东西。用起来很是方便,在Groovy中闭包能够做为方法的参数和返回值,也能够做为一个变量赋值存在。 如何声明闭包?

{ parameters ->
   code
}
复制代码

闭包能够有返回值和参数,固然也能够没有。下面是几个具体的例子工具

//有参闭包,赋值给一个变量
def c1 = {
    v ->
        println v
}
//无参闭包,赋值给一个变量c2
def c2 = {
    println 'hello'
}
//c2闭包做为参数传入方法method2中
method2(c2)
复制代码

另外,若是闭包不指定参数,那么它会有一个隐含的参数 it,闭包是一个难点 建议多看官方APIpost

def test = {
   println "隐含的参数 ${it}, I am a closure!"
}
test(100)
outputs:
find 100, I am a closure! 
复制代码

经常使用集合api

  • list
def fruits = ['apple', 'orange']//声明
fruits << 'banana'//添加数据
fruits[0] = "gradle"//集合中第一项从新赋值
println fruits[0]//根据key取出数据
println fruits.size
println fruits.getClass()

outputs:
gradle
3
class java.util.ArrayList
复制代码

由此能够看出Groovy中国list就是java中的ArrayList<<表示向List中添加新元素

  • map
def dataSource = ['groupId': 1, 'year': '2017']//声明
dataSource.groupName = '行业'//添加数据
dataSource['year'] = '2018'//更新数据
println dataSource['year']//获取value
println dataSource.groupId//获取value
println dataSource.size()
println dataSource.getClass()

outputs:
2018
1
3
class java.util.LinkedHashMap
复制代码

由此能够看出Groovy中国map就是java中的LinkedHashMap,访问key不只能够经过map.获取dataSource.groupName也经过map[key]获取dataSource['year']获取。 假如咱们如今想采用Groovy方式遍历和这个集合该怎么办那?查文档发现 [image:422EA4A3-C96F-40A7-9E74-3AD85AF88A43-4899-00001DBAD2F11AC4/Snip20180114_6.png] 能够发现,这两个each方法的参数都是一个闭包,若是咱们传递的闭包是一个参数,那么它就把entry做为参数;若是咱们传递的闭包是2个参数,那么它就把key和value做为参数。 接下来咱们遍历上面的 dataSource

dataSource.each { key, value ->
    println "two parameters, find [${key} : ${value}]"
}
println()
dataSource.each {
    println "one parameters, find [${it.key} : ${it.value}]"
}

outputs:
two parameters, find [groupId : 1]
two parameters, find [year : 2018]
two parameters, find [groupName : 行业]

one parameters, find [groupId : 1]
one parameters, find [year : 2018]
one parameters, find [groupName : 行业]
复制代码
  • 增强的IO 在Groovy中,文件访问要比Java简单的多,无论是普通文件仍是xml文件

读取普通文件

在根目录下,新建a.txt [image:88688DC4-000C-4FF4-8ABA-0234A13A2A84-4899-0000206B8BF3CA1E/C6E33E21-322F-4A1A-9AAA-835B7A00F0A5.png] 接下里咱们就把a.txt的文本按行取出来

def file = new File("a.txt")
file.eachLine {
    line,lineNo->
        println "${lineNo} ${line}"
}
file.eachLine { line ->
    println "${line}"
}

outputs:
1 hello
2 gradle
hello
gradle

复制代码

除了eachLine外,File还提供了不少Java所没有的方法,咱们须要用的时候再去查就好了。

接下来让咱们在试下读取xml文件

Groovy访问xml有两个类:XmlParser和XmlSlurper,两者几乎同样,查看官方demo以下

def xml = '<root><one a1="uno!"/><two>Some text!</two></root>'
 def rootNode = new XmlParser().parseText(xml)
 assert rootNode.name() == 'root'
 assert rootNode.one[0].@a1 == 'uno!'
 assert rootNode.two.text() == 'Some text!'
 rootNode.children().each { assert it.name() in ['one','two'] }
复制代码

好了,今天是咱们这个Gradle系列的第一篇文章,相信如今你已经了解了Gradle的基本语法了,固然也是一些最经常使用的用法。下一篇文章当中,咱们会介绍Gradle构建脚

若有疏漏,请指出,若有问题能够经过以下方式联系我

简书 csdn 掘金 klvens跑码场

相关文章
相关标签/搜索