Android Gradle 干货,sharedpreferences 跨进程
def Task hello=task(hello,group:BasePlugin.BUILD_GROUP)
hello.doLast{
println "hello world"
}
1.3.TaskContainer 的 create 方法创建。
tasks.create(name: 'hello') << {
println "hello world"
}
1.4 通过上面 dsl 语法创建
2、任务依赖
任务依赖会决定任务运行的先后顺序,被依赖的任务会在定义依赖的任务之前执行。创建任务间的依赖关系如下所示。
task hello << {
println 'Hello world!'
}
task go(dependsOn: hello) << {
println "go for it"
}
在 hello 任务的基础上增加了一个名为 go 的任务,通过 dependsOn 来指定依赖的任务为 hello,因此 go 任务运行在 hello 之后。
3、动态定义任务
动态定义任务指的是在运行时来定义任务的名称
3.times {number ->
task "task$number" << {
println "task $number"
}
}
times 是 Groovy 在 java.lang.Number 中拓展的方法,是一个定时器。3.times 中循环创建了三个新任务,隐式变量 number 的值为 0,1,2,任务的名称由 task 加上 number 的值组成,达到了动态定义任务的目的。
运行 gradle -q task0 构建脚本
4、任务的分组和描述
Gradle 有任务组的概念,可以为任务配置分组和描述,以便于更好的管理任务,拥有良好的可读性。
task hello {
group = 'build'
description = 'hello world'
doLast {
println "任务分组: ${group}"
println "任务描述: ${description}"
}
}
task go(dependsOn: hello) << {
println "go for it"
}
Gradle 日志级别
级别 用于
ERROR 错误消息
QUIET 重要的信息消息
WARNING 警告消息
LIFECYCLE 进度信息消息
INFO 信息性消息
DEBUG 调试消息
前面我们通过 gradle -q +任务名称来运行一个指定的 task,这个 q 是命令行开关选项,通过开关选项可以控制输出的日志级别。
开关选项 输出日志级别
无日志选项 LIFECYCLE 及更高级别
-q 或者 --quiet QUIET 及更高级别
-i 或者 --info INFO 及更高级别
-d 或者 --debug DEBUG 及更高级别
Gradle 命令行
略
Gradle 的语法
1、声明变量
Groovy 中用 def 关键字来定义变量,可以不指定变量的类型,默认访问修饰符是 public。
def a = 1;
def int b = 1;
def c = "hello world";
2、方法
方法使用返回类型或 def 关键字定义,方法可以接收任意数量的参数,这些参数可以不申明类型,如果不提供可见性修饰符,则该方法为 public,如果指定了方法返回类型,可以不需要 def 关键字来定义方法,如果不使用 return ,方法的返回值为最后一行代码的执行结果。
用 def 关键字定义方法。
task method <<{
add (1,2)
minus 1,2 //1
}
def add(int a,int b) {
println a+b //3
}
int minus(a,b) {
return a-b
}
3、类
Groovy 类非常类似于 Java 类。
task method <<{
def p = new Person()
p.increaseAge 5
println p.age
}
class Person {
String name
Integer age =10
def increaseAge(Integer years) {
this.age += years
}
}
Groovy 类与 Java 类有以下的区别:
默认类的修饰符为 public。
没有可见性修饰符的字段会自动生成对应的 setter 和 getter 方法。
类不需要与它的源文件有相同的名称,但还是建议采用相同的名称。
4、语句
(1) 断言
Groovy 断言和 Java 断言不同,它一直处于开启状态,是进行单元测试的首选方式。
task method <<{
assert 1+2 == 6
}
(2)for 循环
Groovy 支持 Java 的 for(int i=0;i<N;i++)和 for(int i :array)形式的循环语句,另外还支持 for in loop 形式,支持遍历范围、列表、Map、数组和字符串等多种类型
//遍历范围
def x = 0
for ( i in 0..3 ) {
x += i
}
assert x == 6
//遍历列表
def x = 0
for ( i in [0, 1, 2, 3] ) {
x += i
}
assert x == 6
//遍历 Map 中的值
def map = ['a':1, 'b':2, 'c':3]
x = 0
for ( v in map.values() ) {
x += v
}
assert x == 6
(3)switch 语句
task method <<{
def x = 16
def result = ""
switch ( x ) {
case "ok":
result = "found ok"
case [1, 2, 4, 'list']:
result = "list"
break
case 10..19:
result = "
range"
break
case Integer:
result = "integer"
break
default:
result = "default"
}
assert result == "range"
}
5、数据类型
Groovy 中的数据类型主要有以下几种:
Java 中的基本数据类型
Groovy 中的容器类
闭包
(1)字符串
在 Groovy 种有两种字符串类型,普通字符串 String(java.lang.String)和插值字符串 GString(groovy.lang.GString)
def name = 'Android 进阶之光'
println "hello ${name}"
println "hello $name"
task method <<{
def name = '''Android 进阶之光
Android 进阶解密
Android 进阶?'''
println name
}
(2)List
Groovy 没有定义自己的集合类,它在 Java 集合类的基础上进行了增强和简化。Groovy 的 List 对应 Java 中的 List 接口,默认的实现类为 Java 中的 ArrayList。
def number = [1, 2, 3]
assert number instanceof List
def linkedList = [1, 2, 3] as LinkedList
assert linkedList instanceof java.util.LinkedList
task method <<{
def number = [1, 2, 3, 4]
assert number [1] == 2
assert number [-1] == 4 //1
number << 5 //2
assert number [4] == 5
assert number [-1] == 5
}
def name = [one: '魏无羡', two: '杨影枫', three: '张无忌']
assert name['one'] == '魏无羡'
assert name.two == '杨影枫'
注释 1 处的索引-1 是列表末尾的第一个元素。注释 2 处使用<<运算符在列表末尾追加一个元素
评论