快速入门安卓Gradle指南(1/10)Groovy基础语法
牛客高级系列专栏:
安卓(安卓系统开发也要掌握)
- 想通关安卓面试,请看:《150道安卓高频面试题目录及答案链接》
- 想通关安卓系统面试,请看:《140道安卓系统Framework面试题目录及答案链接》
- 想进阶安卓开发,请看:《Android进阶知识体系解析_15大安卓进阶必备知识点》
- 想了解安卓APP完整开发流程,请看:《安卓APP完整开发流程》
- 想掌握安卓App性能优化,请看:《安卓性能优化讲解和实战专栏》
- 想掌握Gradle语法,制作Gradle插件,请看:《安卓Gradle语法解析和实践大全》
嵌入式
- 想通关嵌入式面试,请看: 《111道嵌入式面试题目录及答案链接》
- 想多掌握几个嵌入式项目,请看:《6个嵌入式项目交流分享(附源码)》
本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对安卓Gradle的理解。网上安卓资料千千万,笔者将继续维护专栏,承诺提供专栏内容免费技术答疑,直接咨询即可,助您提高安卓学习效率!
目录开始⬇
- 1、Groovy
- 2、Groovy的运行方式
- 3、Groovy常见语法
- 数据类型
- 基础类型
- 字符串
- 通用语法
- 定义变量
- 定义方法
- 类
- 断言
- 循环
- switch
- List
- Map
- 闭包
- import
- IO操作
- 数据类型
- 4、 DSL
1、Groovy
Groovy 是一种基于 JVM 的动态编程语言,支持原生的 Java 语法和标准库,并吸收Python、Ruby等语言的优秀特性,添加了许多扩展,包括闭包、动态类型、运算符重载、字符串模版、DSL、元编程、支持 JSON 和 XML 等序列化和反序列化,以及内置支持数据库访问、Web 编程和测试编写等功能。如果你忘记了Groovy语法,可以继续按Java语法写。
Groovy 被广泛应用于构建 Java 平台上的服务器端应用、Web 应用程序、安卓应用程序、测试自动化等场景。
2、Groovy的运行方式
我们看看安卓APP工程里面根build.gradle文件有如下代码:
task clean(type: Delete) {
delete rootProject.buildDir
}
这段 Groovy 代码定义了一个名为 "clean" 的 Gradle 任务,使用了 Gradle 的 "Delete" 类型,用于清空项目的 build 目录。这意味着在执行此任务时,会删除 rootProject.buildDir 目录及其所有子目录和文件。要执行此任务,只要执行如下命令:
gradle clean
这个例子相信对于入门过安卓APP开发的同学来说,一定不陌生,所以Groovy的运行方式就是:
- 新建一个build.gradle文件(对应案例中的根build.gradle文件);
- 添加一个task,并编写需要执行的任务(对应案例中的clean任务);
- 运行命令:gradle + 任务名称对代码进行运行调试;(对应案例中的'gradle clean'命令)
3、Groovy常见语法
仅凭一篇文章是介绍不完Groovy语法的,在此,我们快速入门最常见的Groovy语法。先推荐几个学习Groovy语法的网站:
还有两个比较好用的在线运行Groovy的网站:
数据类型
基础类型
Groovy支持的基本数据类型,包括:byte、short、int、long、float、double、boolean、char,除了以上基本数据类型,Groovy 还提供了 BigInteger、BigDecimal、Object 和 void 类型:
- BigInteger: 不受固定范围限制的大整型数据类型
- BigDecimal: 不受固定范围限制的大实数数据类型
- Object: 所有类和接口的超类,表示任意类型的值
- void: 返回值为空的特殊类型,表示对方法的调用不需要返回任何结果
字符串
Groovy的字符串有单引号、双引号、三引号字符串;
// 单引号字符串
def name = 'Xurui'
println 'Hello, ' + name + ' !' //打印 Hello, xurui !
// 双引号字符串,双引号字符串可以在运行时进行字符串插值
println "Hello, ${name} !" // 也是打印 Hello, xurui !
// 三引号字符串,保留文本的换行和缩进格式,但不支持插值
def text = """Hello,
world!
Hello Xurui!"""
println text
最后打印的内容是(不仅保留了换行,第二行前面的缩进也保留了):
Hello,
world!
Hello Xurui!
通用语法
- 语句后面的分号可以省略,可加可不加;
- 注释:单行注释使用//,多行注释使用/**/
- 方法后面的括号可以省略,如下面三行有注释的代码的括号都是可以省略的:
int addNumber(a, b) {
println (a + b) //括号可以省略
return (a + b) //括号可以省略
}
def sum = addNumber (1, 4) //括号可以省略,没错,调用方法也可以省略括号
- as/asType asTyep可以用于数据类型的转换
String a = '100'
int num = a as int// 把字符类型的a转换为int类型,赋值给b
def num2 = a.asType(Integer) //同理
- 判断是否为真 以下两行代码等价,是不是觉得比java简洁多了
if (str != null && str.length > 0)
if (str)
- ?.符号 Groovy 的 ?. 操作符被称为可空属性安全导航运算符,以下代码是等价的:
def user = getUser() // 可能返回 null
if (user != null) {
println user.name // 进行非空判断
...
}
//等价于
def user = getUser()
println user?.name //所以此时如果user是空的,则不会有打印,也不会报错
如果懂Kotlin语法的同学,看到?.符号很容易想到!!. 符号,不过Groovy语法中并不支持!!.哦。
- ?: 操作符:Elvis 运算符 Groovy 中的 ?: 操作符又称为 Elvis 运算符。它的作用是判断左侧操作数是否为 null,如果不为 null,则返回左侧操作数的值,否则返回右侧操作数的值。?: 操作符可以用于设置默认值或者替换 null 值,例如:
def userName = user?.name ?: "Xurui" //如果user?.name是空的,则赋值"Xurui"
- with/apply with/apply 语法是一种方便的语法结构,可以用来简化代码并提高代码的可读性。它可以使得在多个参数的情况下,能够更清晰地传递参数,并避免多次调用同一个对象。语法如下:
class Student {
String name
int age
}
def stu = new Student(name : "xurui", age : 28)
println stu.name
println stu.age
stu.age += 1
//使用with可以写为:
def rlt = stu.with {
println name
println age
age += 1 //with 返回最后一个执行语句的结果
}
println rlt //打印出29.因为with 返回最后一个执行语句的结果,此时rlt是上面‘age += 1’的数值,即29
//使用apply可以写为( apply 更适用于需要在闭包中对对象的多个属性进行修改的场景):
stu.apply {
name = "LeeYu"
age += 1
}
// apply 返回该对象本身,所以可以这么写
def anotherStudent = new Student().apply {
name = "LeeYu"
}.apply { //这里返回一个Student类,里面只配置了name = "LeeYu",所以可以接着配置
age = 27
}
- 推荐使用def定义变量或者方法,而不是具体的类型
定义变量
可以使用def来定义变量,默认访问修饰符为public,可以不指定变量的类型,如下面两行代码是等价的:
def a = 1; //Groovy 会自动根据变量的值推断类型
def int a = 1;
定义方法
可以使用def来定义方法,默认访问修饰符为public,常见的语法有:
// 标准函数定义
def add(int a, int b) {
return a + b;
}
// 参数类型可以省略
def add(a, b) {
return a + b;
}
//可以不指定变量的类型,指定类型时可以省略def关键字;
int add(int a, int b) {
return a + b;
}
//可以不使用return,自动将最后一行代码的执行结果当作返回值:
int add(int a, int b) {
a + b;
}
//使用闭包:闭包可以看作是一种无名函数,可以在程序执行时动态定义、构建、返回和存储,下文会单独介绍闭包
def isLessThan10 = {
int i -> i < 10 == 1 //比较传入的整数参数是否小于 10,如果是则返回 1,否则返回 0
}
类
Groovy的类默认访问修饰符为public,且定义的类所在的文件的名字不需要和类的名字保持一致(Java就要求保持一致),不过还是建议采用相同名字。
//定义
class Student {
String name
int age = 10
def getName() {
this.name
}
def addAge(int age) {
this.age += age
}
}
//使用
def stu = new Student()
stu.addAge 5
println stu.age //会打印 15
断言
Groovy的断言一直处于开启状态,是进行单元测试的首选方式,比如执行:
assert 1 + 1 == 3
则程序运行到这里时就会抛出异常,停止运行。
循环
Groovy的循环有:
- for-in 循环
- for-each 循环
- for-loop 循环
- while循环
- do-while循环
举几个常见的使用案例:
for (i in 0..9) {
println i
}
def list = [1, 2, 3, 4, 5]
list.each{
println it
}
def map = [name:'Bob', age:35, gender:'Male']
map.each{ key, value ->
println "$key: $value"
}
for (v in map.values()) {
println v
}
def arr = [1, 2, 3, 4, 5]
for (i in arr) {
println i
}
for (int i : arr) {
println i
}
def numbers = [1, 2, 3, 4, 5]
numbers.ea
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
如果你想学习Android App开发,那么学习Gradle一定是必要的。 Gradle是一种构建工具,用于编译和构建Android应用程序,它可以自动处理依赖关系,生成APK文件等。通过本指南,你将掌握Gradle的基本概念和使用技巧,以及如何在工程中配置Gradle。通过学习Gradle,你可以更高效地构建和管理你的Android应用程序,提高你的开发效率,从而更好地满足用户需求。