gradle脚本 - groovy基本语法(看懂androidgradle脚本为什么是这样的)

本文旨在帮助理解Android Gradle脚本中的Groovy语法,包括执行简单task、字符串区别、列表与映射操作、方法调用、代码块作为参数及闭包等。通过实例演示,加深对Groovy在Gradle脚本中应用的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

因为我对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的信息 (大吉大利今晚吃鸡)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值