来到这里的是不是都有以下疑问:
1.build.gradle配置文件结构好复杂啊,怎么记?
2.内部是怎么进行分析和执行的?
3.为什么可以在配置文件里面写groovy代码,怎么识别的?
4.怎么才能很方便的记住和快速上手gradle呢?
好的,现在我带着你们的疑问,使用groovy代码的方式,慢慢解开build.grade神秘的面纱,探索其中的奥妙!!!
声明:不要急,我们慢慢深入,请耐心看完
首先我们先看一段groovy代码
def dependencies = {
println("我执行了")
}
dependencies()
执行结果:
这断代码就是一个无参方法声明和调用,是不是非常简单。
现在我们进一步改造
代码:
def dependencies = {
int a, int b ->
println("我执行了" + a + b)
}
dependencies(1, 2)
执行结果:
我这次只是加了两个整型参数,进行打印。
好的,我们再次深入改造
代码:
def dependencies = {
int a, int b, Closure c ->
println( a+b)
c.call()
}
dependencies(1, 2){
println("我执行了")
}
执行结果:
卧槽,什么鬼!!!!,竟然也行,
重要先看这部分代码
dependencies(1, 2){
println("我执行了")
}
这部分代码起始可以看成是两部分:
1. 执行函数部分,dependencies(1, 2)
2.回调函数逻辑实现部分,
{ println("我执行了") }
当我们执行
dependencies(1, 2){ println("我执行了") } 这段代码时,实际执行流程就是将
{ println("我执行了") }这部分代码生成回调函数,由Closure对象的call函数进行执行回调
然后真正执行函数dependencies,然后执行Closure.call执行回调逻辑。
以上都看明白了,现在我们真正进入主题
以gradle配置文件为例子,如下
dependencies { implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' }
此时你有该蒙蔽了
implementation 'com.google.android.material:material:1.4.0'是什么意思啊,你上面没有说啊,
那好,我们现在说,其实方法调用还有另一种方式
方法名称 参数1[,参数2]
就拿前面举得例子
代码:
def dependencies = {
a ->
println("结果:" + a)
}
dependencies 100
执行结果:
和dependencies(100)效果是一样的,
那好现在明白了,原来implementation、testImplementation、androidTestImplementation 其实就是内置函数哈。
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
这些其实都是在调用函数哈,
dependencies {
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
那好,现在我就按照这个配置文件整体实现一下代码。
代码:
def implementation = {
arg ->
println("引入接口依赖:" + arg)
};
def testImplementation = {
arg ->
println("引入测试接口依赖:" + arg)
};
def androidTestImplementation = {
arg ->
println("引入安卓测试接口依赖:" + arg)
}
def dependencies = {
Closure c ->
c.call()
}
dependencies{
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
执行结果:
恍然大悟,原来build.gradle配置文件其实就是在执行各种函数。
应当随时学习,学习一切;应该集中全力,以求知道得更多,知道一切