Android Gradle 干货

本文介绍了Gradle的基础概念,如任务的创建、依赖、动态定义,以及如何通过GroovyDSL进行项目构建。此外,还涵盖了任务的分组、描述和日志级别控制。文章还提到了Android开发者需关注的技术点,如高级UI、性能调优、NDK开发和前沿技术趋势,强调了系统学习的重要性。
摘要由CSDN通过智能技术生成

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学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值