gradle文件里就是Groove语言

reposistories {
    google()
}
相当于
reposistories ({
    google()
})

也就是实际上大括号内的就是参数

这是Groove语言的闭包,类似于Java的lamada表达式,把方法作为参数传递,当然Java里的是匿名内部类

闭包:Closure

int methodA = {
    return 5
}

void methodB(int value, Closure someMethod) {
    someMethod()
}

methodB(5, {
  methodA()
})
可以写成
methodB(5) {
  methodA()
})

所以传入的google()并不一定会立刻执行,而是被调用到才会执行

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.4"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

methodMissing:如果调用方法没有,会进入这里查找,能查到就执行对应内容

buildTypes {
    debug{}
}

flavorDimensions '维度'

productFlavors {
    free{}
    paid{}
}
task clean(type: Delete) {
    print 1
    delete rootProject.builder
    
    doLast {
        println 3
    }
}

先配置在执行,不用task命令也会进行配置

task after(dependsOn: clean) {
    doFirst
}

依赖,会在执行前先执行clean task

有向无环图

生命周期:

初始化阶段:执行setting,确定主项目和子项目

配置阶段:绘制task执行依赖图

执行阶段:执行task

在第一个和第二个阶段之间插入任务:写在setting.gradle里

第二第三:在build里afterEvaluate{}