Gradle 与 AGP 构建 API: 配置您的构建文件

2021 年 12 月 21 日 谷歌开发者

欢迎阅读全新的 MAD Skills 系列之 Gradle 及 Android Gradle plugin API 的第一篇文章。我们将在本文中了解 Android 构建系统的工作方式以及 Gradle 的基础知识。


  • Gradle
    https://gradle.org/

  • Android Gradle plugin API
    https://developer.android.google.cn/reference/tools/gradle-api


我们将会从 Gradle 的构建阶段开始,讨论如何使用 AGP (Android Gradle Plugin) 的配置选项自定义您的构建,并讨论如何使您的构建保持高效。如果您更喜欢通过视频了解此内容,请在此处查看: 

△ Gradle 与 AGP 构建 API: 配置您的构建文件

通过了解构建阶段的工作原理及配置 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.gradle 文件中的 android DSL 块并创建 AGP DSL 对象,例如 ApplicationExtension 和 BuildType 。

  • Gradle DSL

    https://docs.gradle.org/current/dsl/index.html


典型的 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 如何使用这些信息来创建变体,以及您可以使用哪些其他选项,请参阅 构建文档 : 

https://developer.android.google.cn/studio/build

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' }


  • Maven
    https://maven.apache.org/

  • Ivy
    http://ant.apache.org/ivy/



构建阶段


Gradle 分三个阶段评估和运行构建,分别是 Initialization (初始化)、Configuration (配置) 和 Execution (执行),更多请参阅 Gradle 文档:

https://docs.gradle.org/current/userguide/build_lifecycle.html


在 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 来扩展您的构建。


您也可以通过下方二维码向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!



推荐阅读

如页面未加载,请刷新重试



 点击屏末 | 阅读原文 | 即刻了解配置 build 更多内容




登录查看更多
0

相关内容

Android(安卓)是一种以 Linux 为基础开发的开放源代码的操作系统,主要应用于便携设备。2005 年,Android 公司被 Google 收购,随后 Google 联合制造商组成开放手机联盟。Android 已从智能手机领域逐渐扩展到平板电脑、智能电视(及机顶盒)、游戏机、物联网、智能手表、车载系统、VR以及PC等领域。
【Manning新书】Kafka实战,272页pdf,Kafka in Action
专知会员服务
62+阅读 · 2022年1月30日
【资源】100+本免费数据科学书
专知会员服务
110+阅读 · 2020年3月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
70+阅读 · 2020年1月17日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
23+阅读 · 2019年11月7日
实战 | 使用 Kotlin Flow 构建数据流 "管道"
谷歌开发者
0+阅读 · 2022年3月30日
Android 基础知识课程助您轻松构建应用
谷歌开发者
0+阅读 · 2022年3月25日
通过基准配置文件改善应用性能
谷歌开发者
0+阅读 · 2022年3月9日
Android Studio 新特性详解
谷歌开发者
0+阅读 · 2022年1月19日
在 Android 12 中构建更现代的应用 Widget
谷歌开发者
0+阅读 · 2022年1月12日
Gradle 与 AGP 构建 API: 进一步完善您的插件!
谷歌开发者
0+阅读 · 2022年1月5日
Gradle 与 AGP 构建 API: 如何编写插件
谷歌开发者
0+阅读 · 2021年12月24日
领英远程开发云架构构建之路
InfoQ
0+阅读 · 2021年12月17日
Hilt 工作原理 | MAD Skills
谷歌开发者
0+阅读 · 2021年10月18日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
2+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
7+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2010年12月31日
Arxiv
21+阅读 · 2021年12月31日
Arxiv
92+阅读 · 2020年2月28日
Arxiv
15+阅读 · 2018年4月5日
VIP会员
最新内容
俄罗斯如何拦截乌克兰无人机与巡航导弹
专知会员服务
8+阅读 · 10月15日
《武器-目标分配问题:精确与近似求解算法》
专知会员服务
11+阅读 · 10月15日
综述|谁来改进机器人?迈向物理递归自我改进
专知会员服务
10+阅读 · 10月14日
软件定义无人机蜂群给防空带来全新压力
专知会员服务
10+阅读 · 10月13日
《半自主无人地面战车的互操作性》66页
专知会员服务
14+阅读 · 10月13日
相关资讯
实战 | 使用 Kotlin Flow 构建数据流 "管道"
谷歌开发者
0+阅读 · 2022年3月30日
Android 基础知识课程助您轻松构建应用
谷歌开发者
0+阅读 · 2022年3月25日
通过基准配置文件改善应用性能
谷歌开发者
0+阅读 · 2022年3月9日
Android Studio 新特性详解
谷歌开发者
0+阅读 · 2022年1月19日
在 Android 12 中构建更现代的应用 Widget
谷歌开发者
0+阅读 · 2022年1月12日
Gradle 与 AGP 构建 API: 进一步完善您的插件!
谷歌开发者
0+阅读 · 2022年1月5日
Gradle 与 AGP 构建 API: 如何编写插件
谷歌开发者
0+阅读 · 2021年12月24日
领英远程开发云架构构建之路
InfoQ
0+阅读 · 2021年12月17日
Hilt 工作原理 | MAD Skills
谷歌开发者
0+阅读 · 2021年10月18日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
相关基金
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
2+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
7+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2010年12月31日
Top
微信扫码咨询专知VIP会员