groovy语法:
一、基本使用
-
类型定义
//可选的类型定义 类型自动推导 def age = 10 def name = "城南一霸贾十七" assert age == 11 println("name is ${name} age is ${age}")
-
assert语句
asset语句,断言语句(我暂时理解为判断语句) ,可以在任意地方执行
-
括号
是可选的
如在上面打印语句中,println "name is ${name} age is ${age}"
等同于println("name is ${name} age is ${age}")
-
字符串的表达形式
''
单引号。仅仅表达的是一个字符串""
双引号。可以插入变量''' '''
三个单引号。可以换行
def city = 'GanSu' def country = "China" def address = '''城南一霸贾十七的 家乡在 ''' println("${address}:${country}.${city}")
输出:
-
申明一个
list
集合// 申明一个list集合 def list = ['maven', 'ant'] // 给list集合追加一个元素 list << 'gralde' // 判断是否为ArrayList assert list.getClass() == ArrayList // 判断list集合大小是否为3 assert list.size() == 3 // foreach 打印item list.each { println("item: ${it}") }
输出结果:
-
申明一个
Map
集合def information = ['name': '城南一霸贾十七', 'job': 'programmer'] information.address = '中国.甘肃.武山' information.entrySet().each { println("key:${it.key},value:${it.value}") }
-
闭包
闭包,是一个代码块,跟方法类似。可以有参数,可以没参数。可以赋值给一个变量,也作为参数传给一个方法。
def c1 = { v -> println("有参数闭包,参数为:${v}") } def c2 = { println("无参数闭包") } def method1(Closure closure) { closure('param') } def method2(Closure closure) { closure() } method1(c1) method2(c2)
构建脚本
-
在gradle中,通过 group name version 唯一确定一个依赖包,如:
implementation 'androidx.appcompat:appcompat:1.1.0'
group(类比maven中的 GroupID):androidx.appcompat
name(类比maven中的ArtifactID):appcompat
version:1.1.0 -
常用方法:
apply,dependencies,repositories task
apply:应用一个插件
dependencies:项目依赖
repositories:去哪个仓库找依赖jar包,然后根据group name version 确定组件
task:申明项目中有哪些任务 -
属性的其他配置方式
ext,gradle.properties
-
可以通过
ext
直接定义属性,然后直接引用。具体参考:gradle使用技巧(def定义变量 rootProject.ext 添加全局变量)
在project的build.gradle
同级目录下创建config.gradle
,并定义ext属性:ext { android = [ compileSdkVersion: 29, buildToolsVersion: "29.0.2", applicationId : "com.example.architecturedesigin01", // ... ] }
然后在
project的build.gradle
文件引用该文件config.gradle
,在需要使用到的地方通过以下方式引用,如在module目录下的build.gradle
文件中:android { compileSdkVersion rootProject.ext.android.compileSdkVersion buildToolsVersion rootProject.ext.android.buildToolsVersion // .... }
-
在
gradle.properties
中通过key,value的方式申明属性。
-
gradle中的任务task
-
task:任务对应
org.gradle.api.Task
。主要包括任务动作和任务依赖。任务动作定义了一个最小的工作单元。gradle将一个个task任务串联起来完成具体的构建任务。具体查看gradle task -
dependsOn
申明任务依赖 -
doFirst doLast<<
分别在任务列表的首尾添加动作任务。 -
创建一个任务:
task projectTask { println 'This is project task !' }
创建的任务在projcet目录下,因为
task HelloWorld
申明是在projcet目录下,如在module下申明,那该任务是在module目录下。
分别创建了projectTask和moduleApp
两个task,同步后控制台输出: