Android 中 Gradle 调用过程
2020-11-01 本文已影响0人
WalkerDenial
在 Android 开发中,我们经常接触 gradle 文件,例如:settings.gradle、build.gradle 等等,那么新建一个项目,他们之间的先后顺序是什么呢?
What?为什么要知道这个呢,直接调用它不香吗?
香是香,但是 当你需要做一些配置的时候,比如资源配置、预处理等操作的时候,该添加到什么位置呢?只有搞清楚了调用流程,才能在正确的地方添加操作。
接下来以一个新建项目为例:
新建一个 Android 项目目录如下:
├── app
│ ├── libs
│ ├── src
│ ├── build.gradle
│ └── proguard-rules.pro
├── build
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── config.gradle
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
其中 config.gradle
是基础配置,统一管理依赖项,整个项目中,存在 4 个 gradle 文件,它们分别是:
- app/build.gradle:对 app 模块所需配置信息进行管理;
- config.gradle:对依赖配置版本信息进行统一管理;
- build.gradle:项目根配置文件;
- settings.gradle:配置、管理项目模块信息;
对以上 4 个文件进行日志信息输出处理:
app/build.gradle
android {
println("app --> build.gradle --> android")
...
defaultConfig {
println("app --> build.gradle --> defaultConfig")
...
println("app --> build.gradle --> defaultConfig out")
}
buildTypes {
println("app --> build.gradle --> buildTypes")
debug {
println("app --> build.gradle --> debug")
println("app --> build.gradle --> debug out")
}
release {
println("app --> build.gradle --> release")
...
println("app --> build.gradle --> release out")
}
println("app --> build.gradle --> buildTypes out")
}
compileOptions {
println("app --> build.gradle --> compileOptions")
...
println("app --> build.gradle --> compileOptions out")
}
kotlinOptions {
println("app --> build.gradle --> kotlinOptions")
...
println("app --> build.gradle --> kotlinOptions out")
}
println("app --> build.gradle --> android out")
}
dependencies {
println("app --> build.gradle --> dependencies")
...
println("app --> build.gradle --> dependencies out")
}
config.gradle
allprojects {
println("config.gradle --> allprojects")
repositories {
println("config.gradle --> repositories")
...
println("config.gradle --> repositories out")
}
println("config.gradle --> allprojects out")
}
task clean(type: Delete) {
println("config.gradle --> clean")
...
println("config.gradle --> clean out")
}
ext.deps = [
...
]
build.gradle
buildscript {
println("build.gradle --> buildscript")
...
repositories {
println("build.gradle --> repositories")
...
println("build.gradle --> repositories out")
}
dependencies {
println("build.gradle --> dependencies")
..
println("build.gradle --> dependencies out")
}
println("build.gradle --> buildscript out")
}
settings.gradle
println("settings.gradle --> start")
...
println("settings.gradle --> end")
build 项目之后,日志输出信息如下:
Starting Gradle Daemon...
Gradle Daemon started in 953 ms
settings.gradle --> start
settings.gradle --> end
> Configure project :
build.gradle --> buildscript
build.gradle --> repositories
build.gradle --> repositories out
build.gradle --> dependencies
build.gradle --> dependencies out
build.gradle --> buildscript out
config.gradle --> allprojects
config.gradle --> repositories
config.gradle --> repositories out
config.gradle --> allprojects out
config.gradle --> allprojects
config.gradle --> repositories
config.gradle --> repositories out
config.gradle --> allprojects out
config.gradle --> clean
config.gradle --> clean out
> Configure project :app
app --> build.gradle --> android
app --> build.gradle --> defaultConfig
app --> build.gradle --> defaultConfig out
app --> build.gradle --> buildTypes
app --> build.gradle --> debug
app --> build.gradle --> debug out
app --> build.gradle --> release
app --> build.gradle --> release out
app --> build.gradle --> buildTypes out
app --> build.gradle --> compileOptions
app --> build.gradle --> compileOptions out
app --> build.gradle --> kotlinOptions
app --> build.gradle --> kotlinOptions out
app --> build.gradle --> android out
app --> build.gradle --> dependencies
app --> build.gradle --> dependencies out
由此可知,执行顺序如下:settings.gradle --> build.gradle --> config.gradle --> app/build.gradle ,在配置 config 信息时,要注意其实效性在 build.gradle 之后,可以避免很多不必要的错误。
最后,项目地址信息 KotlinStudy,欢迎交流学习。