build.gradle : 文件包含项目构建所使用的脚本。 settings.gradle :文件将包含必要的一些设置,例如,任务或项目之间的依懒关系等。 settings.gradle编译优先级高于build.gradle
一、工作流程
1.1 初始化阶段
首先解析settings.gradle
1.2 Configration阶段:
- 解析每个Project中的build.gradle,解析过程中并不会执行各个build.gradle中的task。
经过Configration阶段,Project之间及内部Task之间的关系就确定了。一个 Project 包含很多 Task,每个 Task 之间有依赖关系。Configuration会建立一个有向图来描述 Task 之间的依赖关系,所有Project配置完成后,会有一个回调project.afterEvaluate,表示所有的模块都已经配置完了
1.3 执行Task任务
二 settings.gradle
settings.gradle 用于配置 project。
2.1 文件配置
- 初始化后的样式
// 插件管理
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
// 依赖关系解析管理
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter()
}
}
// 父模块的名称
rootProject.name = "PageGridView"
//项目模块
include ':app'
- 多模块
// 为指定父模块的名称 平台根
rootProject.name = 'project-root'
//包含子系统以及模块
include ':project-core'
//Hello系统模块的加载
include ':project-hello'
//World系统模块的加载
include ':project-world'
三 根目录build.gradle
和 settings.gradle 在同一目录下的 build.gradle 是一个顶级的 build 配置文件,在这里可以为所有的 project 以及 module 配置一些常用的配置。
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
}
四 模块级 build.gradle
除了在目录下的 build 文件,gradle 支持对每个 module 进行配置,主要有三个重要的代码块:plugin、android 和 dependencies
4.1 演示
plugins {
id 'com.android.application'
id 'com.android.library'
}
android {
namespace 'com.project'
compileSdk 33
defaultConfig {
applicationId "com.project"
minSdk 24
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
4.2 plugin {...}
指定用的是哪个插件
com.android.application Android APP插件(打包得到的是.apk文件)
com.android.library Android库插件(打包得到的是.aar文件)
其他插件
kotlin-android : kotlin bugly.gradle : 腾讯bugly walle.gradle : 美团walle打包
4.3 android {...}
4.3.1 默认项
配置了所有 android 构建所需的参数,这也是 Android DSL 的入口点。
- 默认情况下,只有 compileSdk 和 buildtoolsVersion 这两个属性是必须的。
compileSdk
: 基于哪个 SDK 编译,设置编译时用的Android版本buildToolsVersion
: 基于哪个构建工具版本进行构建的
4.3.2 defaultConfig {...}
-
applicationId
配置包名的 -
versionCode
版本号 -
versionName
版本名称 -
minSdkVersion
app能够运行的最小版本 -
targetSdkVersion
目标设备sdk(向前兼容)
补充说明: 一般 minSdkVersion
< targetSdkVersion
<= compileSdkVersion
-
miniSdkVersion:
app能运行的最小版本,比如 minSdkVersion=18(Android 4.3)那么在低于这个系统版本的设备上就会提示不能安装或运行。 -
compileSdkVersion:
是我们告诉 Gradle,我们是用哪一版本的Android Sdk去编译程序的,可以使用这个版本的 API,比如我们使用的是 7.0 的版本 compileSdkVersion=24,那么我们对于拍照裁剪图片等功能的操作,就可以使用 FileProvider了。 -
targetSdkVersion:
系统通过 targetSdkVersion 来保证 Android 的向前兼容性,在 Android4.4 之后的设备上,系统会判断你的 targetSdkVersion 是否小于 19,如果小于的话,那就按照 19 之前的 api 方法,如果大于等于 19,那么就按照之后的 api 方法来走,保证了程序运行的一致性。也就是向前兼容性。
4.3.3 buildTypes {...}
buildTypes 是构建类型,默认情况下,Android Plugin 会自动给项目构建 debug 和 release 版本,可以在这里面启用混淆,启用 zipAlign 以及配置签名信息等。
4.4 dependencies {...}
dependencies DSL 就不属于 Android 专有的配置了,它是 Gradle API 的一部分,这里定义了该 module 需要依赖的 jar,aar,jcenter库信息。
dependencies {
// 本地项目依赖
implementation project(":mylibrary")
// 本地包依赖
implementation fileTree(dir: 'libs', include: ['*.jar'])
// 远程包依赖
implementation 'com.example.android:app-magic:12.3'
}
本地项目依赖 这声明了对一个名为“mylibrary”(此名称必须与在您的
settings.gradle
文件中使用include:
定义的库名称相符)的 Android 库模块的依赖关系。在构建您的应用时,构建系统会编译该库模块,并将生成的编译内容打包到 APK 中。本地包依赖
// 第一种方式
implementation fileTree(dir: 'libs', include: ['*.jar'])
// 第二种
implementation files('libs/foo.jar', 'libs/bar.jar')
Gradle 声明了对项目的 module_name/libs/ 目录中 JAR 文件的依赖关系(因为 Gradle 会读取 build.gradle 文件的相对路径)。
- 远程包依赖
// 依赖关系解析管理
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
jcenter()
}
}
Gralde 支持从 Maven 或 jcenter 仓库中拉取依赖文件,首先需将仓库添加到列表中,再在 dependencies 中添加声明的包