gradle与agp构建api:配置您的构建文件(代码片段)

谷歌开发者 谷歌开发者     2022-11-29     523

关键词:

欢迎阅读全新的 MAD Skills 系列GradleAndroid 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.gradle 文件中的 android DSL 块并创建 AGP DSL 对象,例如 ApplicationExtensionBuildType

典型的 Android 项目会包含一个顶层 Gradle 构建文件。Android 项目中的每个模块又分别有一个 Gradle 构建文件。在示例项目中,我仅有一个应用模块。

在模块层的 build.gradle 文件中,我需要声明和应用构建项目所需的插件。为了让 Gradle 知道我正在构建 Android 项目,我需要应用 com.android.applicationcom.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 的依赖管理支持兼容 MavenIvy 的仓库,以及来自文件系统的本地二进制文件。

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

欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!

gradle与agp构建api:如何编写插件

欢迎阅读 MADSkills系列之 Gradle与AGP构建API的第二篇文章。通过上篇文章《Gradle与AGP构建API:配置您的构建文件》您已经了解Gradle的基础知识以及如何配置AndroidGradlePlugin。在本文中,您将学习如何通过编写您自己的插件来扩展... 查看详情

groovygradle构建工具(自动下载并配置构建环境|提供api扩展与开发工具集成|内置maven和ivy依赖管理|使用groovy编写构建脚本)(代码片段)

文章目录一、Gradle自动下载并配置构建环境二、Gradle提供API扩展与开发工具集成三、Gradle内置Maven和Ivy依赖管理四、Gradle使用Groovy编写构建脚本一、Gradle自动下载并配置构建环境GradleWrapper(包装器)作用:自动搭建Gradle构建环境,防... 查看详情

Gradle 实现与 API 配置

...onfiguration【发布时间】:2017-10-2903:17:06【问题描述】:在构建我的依赖项时,我试图弄清楚api和implementation配置之间的区别。在文档中,它说implementation有更好的构建时间,但是,在类似的问题中看到这个comment,我想知道这是不... 查看详情

配置不正确。请使用 Gradle 7.0.2 为 VectorDrawableCompat 配置您的构建

...配置不正确。请使用Gradle7.0.2为VectorDrawableCompat配置您的构建【英文标题】:Incorrectconfiguration.PleaseconfigureyourbuildforVectorDrawableCompatwithGradle7.0.2【发布时间】:2022-01-0807:30:43【问题描述】:我之前运行的应用程序突然在我的LaunchActi... 查看详情

6.2、androidstudio添加编译依赖

...远程仓库4、查看依赖关系树英文文献AndroidStudio中的摇篮构建系统可以很容易地包括外部的二进制文件或其他库模块到您的构建与依赖。该依赖性可以位于您的计算机上或远程仓库中,他们宣布任何传递依赖将自动包括在内。要... 查看详情

更新到3.0后,gradle构建失败(代码片段)

...本从2.14.1更新到3.0。从那时起,每次出现此错误时,gradle构建都会失败:错误:原因:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection无法强制转换为org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection此意外错误... 查看详情

构建-14gradle使用技巧(代码片段)

...roidPluginforGradle提供了一种灵活的方式[aflexibleway]来编译、构建和打包您的Android应用或库。本页面汇总了一些有用提示和配置,旨在帮助您充分利用每一个构建[getthemostoutofeachbuild]。管理项目和源代码[Manageprojectsandsour 查看详情

配置gradle构建(代码片段)

构建基础配置AndroidStudio包含一个顶级的构建文件和每个模块的构建文件。构建文件被称为 build.gradle,它是一个纯文本文件,它使用Groovy语法来配置由AndroidGradle插件提供的元素。在大多数情况下,你只需要编辑模块... 查看详情

android知识要点整理(17)----gradle之自定义构建(代码片段)

通过Gradle,我们可以灵活地定制构建中的变量,从而方便灵活地控制构建过程。1.理解三个文件Gradle项目有3个重要的文件需要深入理解:项目根目录的build.gradle,settings.gradle和模块目录的build.gradle。1.settings.gradle文件会... 查看详情

gradle:依赖关系和配置之间的联系是什么?(代码片段)

...g-core:4.1.1.RELEASE'从上面的build.gradle文件我明白依赖是一个构建脚本脚本块(将闭包作为参数的方法)。它在Project对象中定义。编译是所谓的配置。它在Java插件中定义。它是一个将一个参数作为参数的方法吗?在这种情况下,它... 查看详情

如何把springboot插件删除干净

...按照以下步骤操作:1.首先,打开您的项目的Maven或Gradle构建文件(例如pom.xml或build.gradle文件),找到SpringBoot插件的相关配置信息。2.删掉在构建文件中所有与SpringBoot插件有关的配置信息,包括但不限于以下内容:-Maven:pom.xml... 查看详情

gradle生命周期(代码片段)

Gradle与Maven有一个很大的区别是Gradle构建生命周期分三个阶段:初始化阶段:负责判断有多少个Projects参与构建。配置阶段:负责对初始化阶段创建的Projects完成配置。执行阶段:根据配置阶段的配置执行任务。初... 查看详情

如何将 Maven 构建转换为 Gradle?

】如何将Maven构建转换为Gradle?【英文标题】:HowtoconvertaMavenbuildtoGradle?【发布时间】:2014-01-1816:20:10【问题描述】:我知道我应该使用我的build.gradle和init.gradle文件,但我不知道要写什么或如何使用pom.xml文件指向我的项目文件... 查看详情

groovy构建工具(构建工具引入|gradle构建工具作用|传统的依赖管理)

文章目录一、构建工具引入二、Gradle构建工具作用三、传统的依赖管理一、构建工具引入构建工具用于管理代码项目的依赖,编译,测试,发布周期;常见的构建工具:Ant,Make,Maven,Gradle;其中Ant和Maven都使用xml作为构建文件,Make使用Makefile... 查看详情

[androidstudio3.5为每个调试会话进行gradle构建

...用或附加到正在运行的进程时,androidstudio都会触发gradle构建。有什么办法可以阻止这种情况?答案应该构建应用程序以便您进行任何调试。您的文件需要从纯Java文件构建为可以被系统编译和理解的文件。您无法调试不是由gradle... 查看详情

androidgradle插件gradle构建机制②(groovy语言dsl特性|settings.gradle配置文件解析|配置子模块工程目录|顶层配置)(代码片段)

...1、配置子工程2、配置不同目录的子工程3、顶层配置Gradle构建工具的本质是Java应用程序,是运行在Java虚拟机上的;在空白的目录中执行该Gradle构建工具,可以生成一系列的构建文件;一、Groovy语言DSL特性之前在Groovy专栏https://blog.csdn.... 查看详情

gradle构建javaweb应用:servlet依赖与tomcat插件(转)

 Gradle的官方tutorial介绍了构建JavaWeb应用的基本方法。不过在使用Servlet做上传的时候会碰到问题。这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应的JavaWeb工程。参考原文:HowtoBuildWebScanningApplicationwithGradleSer... 查看详情

如何在mac上安装gradle

参考技术AGradle介绍Gradle是一个基于JVM的构建工具,它提供了:像Ant一样,通用灵活的构建工具可以切换的,基于约定的构建框架强大的多工程构建支持基于ApacheIvy的强大的依赖管理支持maven,Ivy仓库支持传递性依赖管理,而不需... 查看详情