Gradle中的依赖方式有以下几种:
- implementation
- api (相当于Gradle3.0之前compile)
- compileOnly (相当于Gradle3.0之前provided )
- runtimeOnly(相当于Gradle3.0之前apk)
其中implementation和api在前面可以加上debug,release或者test声明,例如debugApi
详细说明:
- 使用implementation依赖可以减少构建时间,例如Module A implementation Module B,Module B implementation Module C,此时A无法引用中的内容。当C发生改变时,A不需要重新编译。
- 使用api的依赖,还是上面的例子,A可以引用C中的内容。
- compileOnly的依赖只有编译时可以用,不会打包到apk(注释处理器等)
- runtimeOnly的依赖编译时不可用,会打包到apk
基本语法
第一手资料 Groovy API,Gradle Doc
下面列出几个常用的和Java区别比较大的:
- with,给对象赋值
obj.with {
name = "android"
phone= "145555555"
}
- 和python相似的判断true或false
if (str) { }
- kotlin相似的判空
obj?.setData()
- 使用each遍历Map或List
map.each {
println "map:[${it.key} : ${it.value}]"
}
- XmlParser解析Xml
def xml = new XmlParser().parse(new File("test.xml"))
// 访问view节点的name属性
println xml['view'].@name[0]
- 在android studio中直接运行Groovy,使用命令gradlew test
task(test).doLast {
println "start execute yuangshuo"
getString()
}
def getString() {
}
更多基础语法:
Groovy快速入门指南
Gradle脚本基础全攻略
Gradle生命周期和执行顺序
Gradle的生命周期分为3个阶段:Initialization、Configuration和Execution
- 首先解析settings.gradle来获取模块信息(Initialization阶段)
- configure项目中top-level的build.gradle,然后configure每个module的build.gradle,配置的时候并不会执行task,一个module执行configure结束会执行project.afterEvaluate(Configuration阶段)
- 按configure顺序执行(Execution阶段)
// 打印日志顺序
setting##init
top-level##init
app##init
app##afterEvaluate
common##init
app##task
常用Api
定义Task
- 第一种方式
task myTask {
println "config myTask"
}
myTask.doLast {
println "after execute myTask"
}
myTask.doFirst {
println "before execute myTask"
}
执行一个task时,都会先执行task的配置,doFirst是在task开始执行之前,而doLast则是在执行后,两者都是在task配置之后执行的,因为执行任意一个task,都需要先配置一遍。每个task执行之前都需要进行一遍完整的配置。
- 第二种方式
class MyTask extends DefaultTask {
@TaskAction
def hello() {
println "Hello world."
}
}
task taskname(type : MyTask)
@TaskAction表示task要执行的动作
- 第三种方式
project.task('myTask').doLast {
println "after execute myTask"
}
Task依赖
task taskA(dependsOn: 'taskB') {
doLast {
println 'taskA'
}
}
task taskB {
doLast {
println 'taskB#1'
}
}
taskB.doLast {
println 'taskB#2'
}
执行gradlew taskA,打印结果
> Task :app:taskB
taskB#1
taskB#2
> Task :app:taskA
taskA
一个Task执行前先执行其依赖的Task,doFirst和doLast可以被执行多次
Gradle命令:
- gradlew project:列出项目module名称
- gradlew build:执行build操作
- gradlew taskname:执行某个task
- gradlew -x taskname:执行build操作但排除某个task
- gradlew tasks:列出项目中所有任务
- gradlew help –task taskname:显示某个task的详细信息
Gradle日志级别
- Error 错误级别
- Quiet 重要级别
- Warning 警告级别
- LifeCycle 进度信息
- Info 信息性信息
- Debug 调试信息
gradlew -q taskname 可以控制日志输出级别
网友评论