欢送浏览全新的 MAD Skills 系列 之 Gradle 及 Android Gradle plugin API 的第一篇文章。咱们将在本文中理解 Android 构建零碎的工作形式以及 Gradle 的基础知识。
咱们将会从 Gradle 的构建阶段开始,探讨如何应用 AGP (Android Gradle Plugin) 的配置选项自定义您的构建,并探讨如何使您的构建放弃高效。如果您更喜爱通过视频理解此内容,请在 此处 查看。
通过理解构建阶段的工作原理及配置 Android Gradle plugin 的配置办法,能够帮您基于我的项目的需要自定义构建。让咱们回到 Android Studio,一起看看构建零碎是如何工作的吧。
Gradle 简介
Gradle 是一个通用的自动化构建工具。当然,您能够应用 Gradle 来构建 Android 我的项目,但实际上您能够应用 Gradle 来构建任何类型的软件。
Gradle 反对繁多或多我的项目构建。如果要将我的项目配置为应用 Gradle,您须要在我的项目文件夹中增加 build.gradle 文件。
在多我的项目层级构造中,根我的项目中会蕴含一个 settings.gradle 文件,其中列出了构建中蕴含的其余我的项目。Android 应用多我的项目构建来帮您模块化利用。
△ Android 我的项目构造与 build.gradle 及 settings.gradle 文件
因为插件的存在,Gradle 能够解决不同类型的我的项目,比方 Android 或 Java。这些插件会蕴含预约义的性能,用于配置和构建特定类型的我的项目。
例如,为了构建 Android 我的项目,您须要应用 Android Gradle 插件配置您的 Gradle 构建文件。无论以后的 Android 我的项目是利用还是依赖库,Android Gradle 插件都晓得如何对其进行构建和打包。
Task (工作)
Gradle 的构建流程围绕名为 Task (工作) 的工作单元开展。您能够通过终端查看 Task 列表,或通过启用 Android Studio Gradle 面板中的 Task 列表来查看工作。
△ Gradle Task 列表
这些 Task 能够接管输出、执行某些操作,并依据执行的操作产生输入。
Android Gradle Plugin 定义了本人的 Task,并且晓得构建 Android 我的项目时,须要以何种程序执行这些 Task。
Gradle 构建文件由许多不同的局部组成。Gradle 的配置语法被称为 Gradle DSL,其为开发者定义了配置插件的形式。Gradle 会解析 build.gradl
e 文件中的 android DSL 块并创立 AGP DSL 对象,例如 ApplicationExtension
和 BuildType
。
典型的 Android 我的项目会蕴含一个顶层 Gradle 构建文件。Android 我的项目中的每个模块又别离有一个 Gradle 构建文件。在示例我的项目中,我仅有一个利用模块。
在模块层的 build.gradle
文件中,我须要申明和利用构建我的项目所需的插件。为了让 Gradle 晓得我正在构建 Android 我的项目,我须要利用 com.android.application
或 com.android.library
插件。这两个插件别离定义了如何配置和构建 Android 利用和依赖库。在本例中,我要构建的是 Android 利用我的项目,所以我须要利用 com.android.application
插件。因为我须要应用 Kotlin,所以在示例中也利用了 kotlin.android
插件。
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
Android Gradle Plugin 提供了它本人的 DSL,您能够用它配置 AGP,并使该配置在构建时利用于 Task。
想要配置 Android Gradle Plugin,您须要应用 android 块。在该代码块中,您能够为不同的构建类型 (如 debug 或 release) 定义 SDK 版本、工具版本、利用详情及其它一些配置。如需理解更多无关 gradle 如何应用这些信息来创立变体,以及您能够应用哪些其余选项,请参阅 构建文档:
android {
compileSdk 31
defaultConfig {
applicationId "com.example.myapp"
minSdk 21
targetSdk 31
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
}
kotlinOptions {jvmTarget = '1.8'}
}
在下一部分中,您能够定义依赖。Gradle 的依赖治理反对兼容 Maven 与 Ivy 的仓库,以及来自文件系统的本地二进制文件。
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
构建阶段
Gradle 分三个阶段评估和运行构建,别离是 Initialization (初始化)、Configuration (配置) 和 Execution (执行),更多请参阅 Gradle 文档。
在 Initialization (初始化) 阶段,Gradle 会决定构建中蕴含哪些项目,并会为每个我的项目创立 Project 实例。为了决定构建中会蕴含哪些项目,Gradle 首先会寻找 settings.gradle 来决定此次为单我的项目构建还是多我的项目构建。
在 Configuration (配置) 阶段,Gradle 会评估构建我的项目中蕴含的所有构建脚本,随后利用插件、应用 DSL 配置构建,并在最初注册 Task,同时惰性注册它们的输出。
须要留神的是,无论您申请执行哪个 Task,配置阶段都会执行。为了放弃您的构建简洁高效,请防止在配置阶段执行任何耗时操作。
最初,在 Execution (执行) 阶段,Gradle 会执行构建所需的 Task 汇合。
下篇文章中,在编写咱们本人的插件时,咱们将深刻分析这些阶段。
Gradle DSL 反对应用 Groovy 与 Kotlin 脚本编写构建文件。到目前为止,我都在应用 Groovy DSL 脚本来配置此工程的构建。您能够在上面看到别离由 Kotlin 和 Groovy 编写的雷同构建文件。留神 Kotlin 脚本文件名后缀为 “.kts”。
△ Kotlin 与 Groovy 脚本比照
从 Groovy 迁徙到 Kotlin 或其余配置脚本的办法,不会扭转您执行 Task 的形式。
总结
以上便是本文的全部内容。Gradle 与 Android Gradle Plugin 有许多能够让您自定义构建的性能。在本文中,您曾经理解了 Gradle Task、构建阶段、配置 AGP 以及应用 DSL 配置构建的基础知识。
敬请关注下一篇文章,咱们将带您理解如何在编写您本人的插件时,应用 AGP 的 Variant API 来扩大您的构建。
欢迎您 点击这里 向咱们提交反馈,或分享您喜爱的内容、发现的问题。您的反馈对咱们十分重要,感谢您的反对!