Gradle 笔记(一)
缘由
在Android的开发中,总遇到需要和Gradle脚本打交道的时候,一开始我觉得这个没啥用没有在意,但是每次打包都需要大半个小时,实在难受,遂决定研究学习下Gradle,这篇文章实我学习中的笔记,供日后参考。
Groovy
Gradle使用Groovy作为开发语音,而Groovy完全兼容Java语法。 需要注意的点:
字符串
''
单引号 表示一段不可变的字符串,不可以执行字符串内的表达式计算""
双引号 表示一段可变的字符串,可以使用字符串内的表达式计算,例如"${rootProject}"
Map
在Groovy里面,Map表示的是一个K-V列表,本质是LinkedHashMap
,使用方式如下:
def map = ['width':1024,'height':1820]
//下面两种方式都可以取值
println map['width']
println map.height
方法
在Groovy中,执行一个方法可以不加括号()
,例如方法sum(int a,int b)
,调用的时候可以写成sum 1,2
结果与sum(1,2)
一样
get/set
Java Bean
的设计里面,通过get
来获取属性值,在Groovy里面不需要写这些方法,直接通过.
就可以读取和设置属性的值。例如我们经常使用的获取项目编译目录文件夹rootProject.buildDir
,他的本质也是rootProject.getBuildDir()
。
对于set
设置属性,在groovy里面只需要添加``面就可以跟新的值,例如description '这是描述'
,等同于setDescription('这是描述')
。
Gradle
asdasd
断言onlyIf
onlyIf
可以用来控制一个Task是否执行,当返回值为true
时表示执行,否则表示不执行。这个效果同enabled
属性一样可以控制是否执行,但是onlyIf
接收的是一个闭包{}
可以在里面添加代码进行判断。例如
taskTest.onlyIf {
false
}
编译参数
在执行gradlew
命令的时候,可以添加一些参数来改变编译环境,例如我们在打包APK的时候,可以设计一个字段buildMarket
来表示打包的具体应用市场渠道,在编译的时候通过-PK=V
的形式这只属性值,其中K V
表示的是key和value。
创建任务
使用任务名+闭包的形式:
task name{
doLast{ doSomething.... }
}
任务名的形式
def Task name = task(name)
name.doLast{doSomething.....
}
查找任务
可以通过tasks
找到定义好的任务,例如tasks.findByName(name)
或者tasks.findByPath(path)
等。