赞
踩
1. settings.gradle文件
位于项目根目录下,用于项目的配置,常见的是配置子工程。可以类比认识,根工程对应AndroidStudio项目中的Project,子工程对应Module。
一个子工程只有在setting.gradle中配置了,才能够被识别,构建的时候才会被包含进去。
- rootProject.name = "GradleGuide"
-
- include ':app'
-
- include ':demo'
- project(":demo").projectDir=new File(rootDir,"demo")
- //rootDir的路径为xxx/xxx/xxx/GradleGuide
rooDir项目的根目录。
project(“:demo”).projectDir=new File(rootDir,“demo”)
此行代码是给子工程demo指定路径。非必需,如果不指定,默认为include ':demo"中demo同级的目录。
2. build.gradle文件
每个Project都有一个build.gradle文件,作为构建的入口。在这个文件中可以配置版本,插件,依赖库等。
对于Root Project也会有一个build.gradle文件,在这个文件中可以获取到所有的Child Project,并对他们进行统一的配置,例如应用的插件,Maven库等。
- buildscript {
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath "com.android.tools.build:gradle:7.1.3"
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30"
-
- }
- }
- allprojects {
- repositories {
- google()
- mavenCentral()
- maven {
- url "https://oss.sonatype.org/content/groups/staging"
- }
- }
- }
-
- subprojects {
- repositories {
- google()
- mavenCentral()
- }
- }

allprojects:对所有的Projet进行配置。
subprojects:对所有的子Project进行配置。
3.Project
Project直译就是项目,在Gradle中会有很多Project,例如在一个Android项目中,有根工程,有module,module又分Application和Library。其实它们都可以理解为是Project,只不过根工程是rootProject,而Module是Project,但实际上都可以理解为是Project。
- task printProjects {
- println "------rootProject------"
- println rootProject.toString()
- println "------rootProject.getRootProject()------"
- println rootProject.getRootProject().toString()
- println "------rootProject.getChildProjects()------"
- def childProjects = rootProject.getChildProjects()
- childProjects.each {
- println "key=${it.key},value=${it.value}"
- }
- }
输出结果:
- ------rootProject------
- root project 'GradleGuide'
- ------rootProject.getRootProject()------
- root project 'GradleGuide'
- ------rootProject.getChildProjects()------
- key=app,value=project ':app'
通过代码输出结果与工程截图对比可以发现,RootProject是GradleGuide,子Project是app。
Project下有很多属性和方法,这里只是简单的使用了两个。
4.Task
Task可以理解为是Gradle的一个执行单元,一个操作,也可以理解为是Project的一个属性。创建一个任务和定义一个Project的变量一样,变量名就是任务名。类型为Task(org.gradle.api),所以可以通过任务名来时使用Task的API来进行访问和控制。
4.1Task创建
4.1.1 通过task创建
- task sayHi{
- println "Hello World"
- }
- task testTask {
- project.sayHi
- }
输出结果:
Hello World
可以看到定义两个task,sayHi,testTask,在testTask中通过project.sayHi的形式来调用。所以把Task理解为Project的一个属性也是没有问题的。
可以看到创建任务的task并不是一个关键字而是一个方法。
4.1.2通过TaskContainer对象tasks创建
- tasks.create("testTasks"){
- println "testTasks"
- }
输出结果:
testTasks
4.2 任务依赖
任务依赖可以使用dependsOn方法来实现,可以接受多个依赖的任务作为参数。
- task beforeSayHi {
- doLast {
- println "beforeSayHi"
- }
- }
- task sayHi(dependsOn:beforeSayHi) {
- // dependsOn beforeSayHi
- doLast {
- println "sayHi"
- }
- }
输出结果:
- > Task :beforeSayHi
- beforeSayHi
-
- > Task :sayHi
- sayHi
通过任务名进行任务的操作需要先声明,其原理是:Project在创建任务的时候,同时会把任务注册为Project的一个属性,类型是Task。可以通过project.hasProperty方法来验证。
- def Task taskOne = task(taskOne) {
-
- }
- taskOne.doFirst {
- println "taskOne-doFirst"
- }
- taskOne.doLast {
- println project.hasProperty("taskOne")
- println "taskOne-doLast"
- }
-
- task sayHi {
- }
- sayHi.doFirst {
- println "sayHi-doFirst"
-
- }
- sayHi.doLast {
- println project.hasProperty("sayHi")
- println "sayHi-doLast"
- }
-
- task entrance{
- dependsOn taskOne,sayHi
- }

输出结果:
- > Task :sayHi
- sayHi-doFirst
- true
- sayHi-doLast
-
- > Task :taskOne
- taskOne-doFirst
- true
- taskOne-doLast
4.4自定义属性
Project和Task都支持添加自定义属性。可以通过ext属性来进行添加和访问,设置多个属性可以使用ext代码块。
其实可以在四个文件中定义:
settings.gradle
build.gradle(root)
build.gradle(module)
自定义gradle文件
在settings.gradle文件中定义
- //settings.gradle文件
- rootProject.name = "GradleGuide"
-
- include ':app'
-
- gradle.ext.settings="settings"
- gradle.ext{
- fileName="settings.gradle"
- }
- RootProject:build.gradle文件
- task printSettingsExt{
- println gradle.ext.settings
- println gradle.ext.fileName
- }
输出结果:
- settings
- settings.gradle
在build.gradle(root)文件中
在其它Project的build.gradle可以通过rootProject,ext.xxx来进行访问。
- apply from:"version.gradle"
-
- ext.name123="kylp"
- ext.set("age",20)
- ext{
- city="北京"
- }
-
- task testExt{
- println "name=$name123"
- println "go=$go"
- println rootProject.ext.name123
- println rootProject.ext.age
- println rootProject.ext.find("city")
- println rootProject.hasProperty("name123")
- }

其中versionl.gradle为自定义新建的gradle文件。
version.gradle文件
ext.go="gogogoggogo"
输出结果:
- name=kylp
- go=gogogoggogo
- kylp
- 20
- 北京
- true
在build.gradle(module)文件中
- ext.paramInAppModule="app"
-
- task printExt {
- println "$paramInAppModule"
- println project.ext.paramInAppModule
- }
输出结果:
- app
- app
在自定义xxx.gradle文件中
同build.grad(root,module)文件。
不同build.gradle属性获取
在build.gradle(module)中获取build.gradle(root)定义的属性使用rootProject.ext.xxx。
————————————————
版权声明:本文为CSDN博主「KyungLip」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/KyungLip/article/details/124435158
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。