引言
因为我对android中的gradle脚本不是很了解,经常看见脚本中的错误就处于懵逼状态,所以把它认识一下。。从《android gradle》这本书中认识的,大概整理自己把demo使用记事本写了一遍,加深记忆,书序语法
每一个gradle的build脚本文件都是一个groovy脚本文件,所以groovy脚本中可写java代码,并且 groovy中没有强制分号(一般gradle脚本中没有分号原因)
1.执行简单的task
task hello{
//使用命令 gradle -q hello 去执行后续有解释
//task 执行完成之后 回调doLast部分
doLast{
println 'hello word'
}
}
task runA{
doLast{
//因为println的print被定义为quiet日志,所以该书初次编译时的命令为 gradle -q hello ---- 为执行hello的task
println "我是RunA"
}
}
2.单引号和双引号都是字符串
在java中单引号是字符,双引号是字符串
// 单引号和双引号都是字符串
task printString{
def str1 = '单引号操作'
def str2 = "双引号操作"
println "单引号类型" + str1.getClass().name
println "双引号类型" + str2.getClass().name
}
3.单引号不能对字符串的表达式做运算
// 单引号不能对字符串的表达式做运算
task printStringVar {
def name = '姓名'
println '单引号的变量计算:${name}'
println "双引号的变量计算: ${name},${2+3}"
}
4.简单的list
java中需要new一个list的接口实现类,groovy不需要
//简单的list
task printListDemo{
//定义list
def list = [1,2,3,4,5];
println "访问第二个元素 ; ${list[1]}"
println "访问最后一个元素 : ${list[-1]}"
println "访问倒数第二个元素 : ${list[-2]}"
println "访问第2个到底4个元素 : ${list[1..3]}"
//for each 迭代
list.each{
//groovy默认定义it变量,如需改变需自定义变量进行迭代
println it
}
}
5.简单的map
map的定义为k:v键值对,进行迭代之后是元素
//简单的map
task printMap{
//map是中括号
def map = ['gao':1024,'kuan':2048]
//获取map,map[key],或者 map.key
println "获取map ${map.gao}"
println "获取map ${map['kuan']}"
//map支持迭代,不过迭代之后是一个元素的实例
map.each{
println "map进行迭代 :key: ${it.key},value : ${it.value}"
}
}
6.方法
groovy调用方法是可以省略括号,并且groovy的return可以不用写,默认将最后一句代码作为返回值
//方法
task methodDemo {
//groovy调用方法是可以省略括号
def a = method2(1,2)
def b = method2 3,1
println "输出 a : ${a}, b : ${b}"
}
def method1(int a, int b){
println "执行a+b : ${a+b}"
}
//groovy的return可以不用写,默认将最后一句代码作为返回值
def method2(int a, int b){
if(a > b){
a
}else {
b
}
}
7.代码块可以作为参数传递
此处是使用一段注释来处理写的,如果需要自己改动代码
/*
for each 例子
list.each({println it})
格式化代码之后
list.each({
println it
})
groovy规定,如果方法的最后一个参数时闭包,可以放到方法外面
list.each(){
println it
}
方法可以省略口号
list.each{
println it
}
*/
8.javaBean
groovy中的Javabean
//javaBean
task javaBeanDemo{
Person p = new Person()
println "p的名字 ${p.name}"
p.name = "鸡神"
//没有定义age 但是我们可以获取age,默认会有一个 getAge的 age变量,当我将getAge修改为getWge是,
//使用age变量会报错,但是会出现wge变量
println "P的名字 ${p.name} 年龄 ${p.age}"
}
class Person{
private String name
public int getAge(){
11
}
}
9.闭包
闭包也是通过注释来写的,如有需要请自行解决
//闭包
/*
each 为例
task demoClosure{
//使用自定义的闭包
customEach{
println it
}
}
//闭包有一个参数时默认为it,当有多个参数时,it就不能表示需要将参数一一列出
def customEach(closure){
//模拟有10个元素的集合进行迭代
for(int i in 1..10){
closure(i)
}
}
----- 向闭包传递参数 ----
task hellClosure {
//多个参数
eachMap{k,v ->
println "${k} ${v}"
}
}
def eachMap(closure){
def map = ["name" : "zhang","gae":188]
map.each{
closure(it.key, it.value)
}
}
*/
该代码块最终的执行效果如下:
备注:后续准备继续抽时间看gradle的信息 (大吉大利今晚吃鸡)