1. settings.gradle
用于初始化及工程树的配置,大多是为了配置子工程,gradle中多工程通过工程树表示;
一个子工程, 只有在settings文件中配置了, gradle才会识别,才会在构建(build)的时候被包含进去;
rootProject.name='LjyWechatDemo'
include ':app'
include ':ljylib'
//指定ljylib的目录,不指定默认为settings.gradle同级目录
project(':ljylib').projectDir=new File(rootDir,'library/ljylib')
2. build文件 每个project都会有一个build文件,在此对project进行配置,如配置版本,所需插件,依赖库等; Root Project可以获取到所有的ChildProject, 因此可以在其build文件中对子工程进行统一配置,如Maven中心库
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' }
}
}
//allprojects和subprojects这两个方法,接受一个闭包作为参数,对工程进行遍历,遍历的过程中调用我们自定义的闭包,
//所以我们可以在闭包里配置,打印,输出或修改project的属性
3. projects以及tasks
Project: 可以看做一个独立的模块, 利用好可以做到高内聚低耦合; Task:一个project可以包含多个task, task就是一个操作,一个原子性的操作,和ant里的target,maven里的goal一样;
4. 创建一个任务
task customTask1{
doFirst {
println 'customTask1:doFirst'
}
doLast {
println 'customTask1:doLast'
}
customTask2
}
tasks.create("customTask2"){
doFirst {
println 'customTask2:doFirst'
}
doLast {
println 'customTask2:doLast'
}
}
5. 任务依赖
任务之间可以有依赖关系,可以控制哪些任务先执行,哪些后执行; 通过dependsOn可以指定其依赖的任务,一个任务可以依赖多个任务
task funHello {
println('hello~~ ')
}
task funWorld {
println('wprld!!!')
}
task funMain1(dependsOn: funHello) {
doFirst {
println('main1.doFirst')
}
doLast {
println('main1.doLast')
}
}
task funMain2 {
dependsOn(funHello, funWorld,customTask1)
doFirst {
println('main2.doFirst')
}
doLast {
println('main2.doLast')
}
}
6. 任务间通过API控制,交互
创建一个任务和定义变量是一样的,变量名就是任务名,类型是task; 脚本是顺序执行的, 必须先定义声明;
println(project.hasProperty('funWorld'))
//打印true,说明每个任务都是project的一个属性
7. 自定义属性
project和task允许用户添加额外的自定义属性 相比局部变量,自定义属性有更广泛的作用域,可以跨project,跨task访问,只要你能访问到这些属性所属的对象; 还可以给sourceSet添加自定义属性 (SourceSets被称作源代码集合,一般可以用它来指定资源的路径)
8. 脚本即代码,代码即脚本
gradle脚本中也可以定义class,内部类,导入包,定义方法,常量,接口,枚举等
def buildTime(){
def date=new Date()
def formattedDate=date.format('yyy-MM-dd')
return formattedDate
}
task showTime{
doFirst {
println("currentTime=${buildTime()}")
}
}
我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章