9、社区的支持和推动
gradle 入门
gradle这个基于Groovy的DSL,DSL(Domain Specifc Language)意为领域特定语言,只用于某个特定的领域。我们只要按照Groovy的DSL语法来写,就可以轻松构建项目
task:
task(任务)和action(动作)是Gradle的重要元素。task代表一个独立的原子性操作,比如复制一个文件,编译一次Java代码,这里我们简单的定义一个名为hello的任务。doLast 代表task执行的最后一个action,通俗来讲就是task执行完毕后会回调doLast中的代码
task hello {
doLast {
println ‘Hello world!’
}
}
也可以写成
task hello << {
println ‘Hello world!’
}
操作符<< 是doLast方法的快捷版本
Gradle的任务
Gradle的任务,包括创建任务、任务依赖、 动态定义任务和任务的分组和描述
1、创建任务
1.1 直接用任务名称创建。
def Task hello=task(hello)
hello.doLast{
println “hello world”
}
1.2 任务名称+任务配置创建
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
最后
都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。
技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;
我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 PDF(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
Java语言与原理;
大厂,小厂。Android面试先看你熟不熟悉Java语言
高级UI与自定义view;
自定义view,Android开发的基本功。
性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。
NDK开发;
未来的方向,高薪必会。
前沿技术;
组件化,热升级,热修复,框架设计
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。
不出半年,你就能看出变化!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
语言
[外链图片转存中…(img-KCC9gztY-1714544439088)]
高级UI与自定义view;
自定义view,Android开发的基本功。
[外链图片转存中…(img-ixkjOwbW-1714544439089)]
性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。
[外链图片转存中…(img-WhVgaLY3-1714544439090)]
NDK开发;
未来的方向,高薪必会。
[外链图片转存中…(img-ICNZaSdF-1714544439091)]
前沿技术;
组件化,热升级,热修复,框架设计
[外链图片转存中…(img-kjZTWhcj-1714544439092)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。
不出半年,你就能看出变化!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!