全面理解Gradle - 定义Task

编写 Gradle 任务Task 编写 Gradle 任务Task 我们先介绍了 Gradle,然后学习了 Groovy 的基础语法,紧接着介绍了 Android 项目中 Gradle 的配置。我们从配置中可以看出 Gradle 的构建都是基于任务(Task)的,有了前面几节的基础,今天这节课我们来学习一下,怎么样去定义一个 Gradle 的任务(Task),以及Task的生命周期。 1. 声明 Task 关于 Task 的声明,我们其实在《构建自己的 Gradle 工程》这一节里面就有所介绍,我们创建 Gradle 项目时就声明.. 阅读详情

Task可以理解为Gradle的执行单元,实在是太重要了。根据前面的分析,Gradle通过一个个task来完成具体的构建任务,下面我们来看下Task的定义。

最简单直接,通过如下方式来定义:

task myTask {
println "config myTask"
}
我们执行下

renyugang$ gradle myTask

config myTask
再执行下

renyugang$ gradle clean

config myTask
可以看出,通过上述方式定义的task,括号内部的代码会在配置阶段执行,也就是说,只要我执行任何一个task,那段代码都会执行,因为每个task执行之前都需要进行一遍完整的配置。

但是很多时候我们并不需要写配置代码,我们想要括号内的代码仅仅在执行我们的task的时候才执行,这个时候可以通过doFirst或者doLast来完成。

doFirst:task执行时,最开始的操作
doLast:task执行时,最后的操作
// 定义并配置myTask
task myTask {
println "config myTask"
}

myTask.doLast {
println "after execute myTask"
}

myTask.doFirst {
println "before execute myTask"
}
执行结果如下

config myTask
:app:myTask
before execute myTask
after execute myTask
除此之外,doLast还有一个等价的操作leftShift,leftShift还可以缩写为<<,因此下面的三种实现效果等价:

myTask.doLast {
println "after execute myTask"
}

myTask.leftShift {
println "after execute myTask"
}

myTask << {
println "after execute myTask"
}
在上面的demo中,myTask真正执行的时候啥都没干,它只是在执行的最开始和最后做了一些事情。

其实,通过@TaskAction操作符也可以指定一个Task执行时要做的事情,它区别于doFirst和doLast,不过@TaskAction平时用的较少,这里简单示范下:

class RygTask extends DefaultTask {
String message = 'This is RygTask'
// @TaskAction 表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行
@TaskAction
def hello(){
println "Hello world. $message"
}
}

// hello使用了默认的message值
task hello(type:RygTask)

// 重新设置了message的值
task hello1(type:RygTask){
message ="I am an android developer"
}
执行gradle hello hello1

:app:hello
Hello world. This is RygTask
:app:hello1
Hello world. I am an android developer
除了上面的Task定义方式以外,Gradle本身还提供了一些已有的Task供我们使用,比如Copy、Delete、Sync等。因此我们定义Task的时候是可以继承已有的Task,比如我们可以继承自系统的Copy Task来完成文件的拷贝操作。

task myTask(type: Copy) { configure closure }
除了这种方式以外,我们还可以通过API来动态创建Task,API也有很多,这里介绍几个最常用的(Gradle水很深,API特别灵活,大家记住最常用的就好)。

// 下面三种定义也一模一样
task myTask << {
println "after execute myTask"
}

project.task('myTask').doLast {
println "after execute myTask"
}

project.tasks.create('myTask').doLast {
println "after execute myTask"
}
定义Task的时候是可以指定很多参数的,如下所示:

参数 含义 默认值
name task的名字 不能为空,必须指定
type task的“父类” DefaultTask
overwrite 是否替换已经存在的task false
dependsOn task依赖的task的集合 []
group task属于哪个组 null
description task的描述 null
在上面的例子中都没涉及参数,下面举个带参数的栗子。

task myTask1 << {
println "execute myTask1"
}

task myTask2 << {
println "execute myTask2"
}

// 定义一个名字为rygTask的task,属于renyugang分组,并且依赖myTask1和myTask2两个task。
project.task('rygTask', group: "renyugang", description: "我自己的Task",
dependsOn: ["myTask1", "myTask2"] ).doLast {
println "execute rygTask"
}
通过Gradle tasks来查看:

Publishing tasks

bintrayUpload - Publishes artifacts to bintray.com.
Renyugang tasks


rygTask - 我自己的Task
Upload tasks


uploadArchives - Uploads all artifacts belonging to configuration ':AndroidStub:archives'
尝试执行gradle rygTask,结果如下:

:app:myTask1
execute myTask1
:app:myTask2
execute myTask2
:app:rygTask
execute rygTask
结果不用我解释了,相信大家都能看懂。

补充说明

Gradle命令是支持连在一起拼写的,比如gradle hello hello1,那么gradle将会先执行hello,然后再执行hello1。
Gradle命令是可以缩写的,前提是这个缩写能够唯一地限定一个task。比如rygTask,那么执行的时候就可以缩写为gradle rTask。
最后,定义task的API很多,我介绍了最常用的部分,剩下的细节还是需要大家查看Gradle文档,其实学习Gradle就是一个查文档的过程。如下几个文档,大家读读。

Project API
TaskContainer API
Task API

从Gradle生命周期到自定义Task挂接到Build构建流程全解 我们知道Gradle构建工具非常的灵活,它提供了一系列的Api让我们有能力去修改或定制项目的构建过程,在项目的编译过程中,插入我们自己的 Task 并执行相关的操作,如:多渠道打包,ASM代码织入和资源的检测等。 要想实现这些功能,首先就需要明白Gradle的构建流程,知道Gradle在每个阶段都做了什么,加上自己需要在哪个阶段做什么事件,就可以通过Gradle提供的Api,插入我们想要执行的代码。因此理解Gradle的生命周期和Hook点,有助于我们梳理、扩展项目的构建流程。 Gradle的构建过程有着固 阅读详情

相关推荐

理解与配置Android studio中的gradle

使用gradle构建android应用时,你总是需要这样一个文件:build.gradle。你应该已经看过这个文件了,如果没有看过的话,你现在就可以看一下,它没有多少内容。它的简洁性得益于它提供了很多对设置和属性的默认值。gradle是基于groovy语言的,但就使用它构建普通的工程的话,是可以不去学groovy的,如果想深入的做一下自定义的构建插件,可以考虑学一下groovy,因为它是基于jav

阳光玻璃杯 4万+

Gradle 中的Task

项目实质上是 Task 对象的集合。一个 Task 表示一个逻辑上较为独立的执行过程,比如编译 Java 源代码,拷贝文件, 打包 Jar 文件,甚至可以是执行一个系统命令。另外,一个 Task 可以读取和设置 Project 的 Property 以完成特定的操作。参考文档例子: 在文件所在的目录执行命令: gradle A。提示 1 :task 的配置段 是在配置阶段 完成提示 2 :task 的 doFirst、doLast 方法是 执行阶段 完成,并且 doFirst 在 doLast 执行之前执行

Lifelong learning 4222

Gradle Task详解:移动开发中的自定义构建逻辑

在移动开发中,我们常常需要对项目进行各种构建操作,比如打包、代码混淆、资源处理等。Gradle是一个强大的构建工具,它的Task机制可以让我们灵活地定义和执行这些构建操作。本文的目的就是详细介绍Gradle Task,帮助读者掌握在移动开发中自定义构建逻辑的方法。范围涵盖Gradle Task的基本概念、核心原理、实际应用等方面。本文首先会介绍Gradle Task的核心概念,通过有趣的故事引入,并用通俗易懂的语言解释。接着讲解核心概念之间的关系,给出原理和架构的文本示意图以及Mermaid流程图。

移动开发前沿的博客 877

【Gradle-7】Gradle构建核心之Task指南

从Task是什么、写在哪、怎么写、怎么运行、怎么写好等方面为切入点,由浅入深、依次递进的介绍了Task Action执行顺序、自定义Task、Task依赖、Task增量构建等相关知识,总的来说,涉及的知识点还是不少的,更需要在实践中去理解并应用。

yechaoa 4745

【CATIA的二次开发38】对象Selection交互选择部分方法介绍01

在CATIA V5的VBA开发中,Selection对象是用户交互的核心组件,用于管理用户在图形区域或特征树中的选择操作。Selection 对象是 CATIA VBA 中的中央交互枢纽,充当用户界面与程序逻辑之间的桥梁。它代表当前在图形区域或特征树中被选中的元素集合,是自动化操作的基础。

学习共勉:不积跬步,无以至千里; 不积小流,无以成江海。 1337

鸿蒙ijkplayer播放器调优实战:从卡顿掉帧到流畅播放RTSP,我都调了哪些参数?

本文深入解析鸿蒙平台上ijkplayer播放器优化RTSP流媒体播放的关键参数,解决卡顿、掉帧等问题。通过调整缓冲区管理、帧处理策略和网络超时设置,实现流畅播放体验,特别适用于监控和直播等高实时性场景。

weixin_29304021的博客 240

Gradle 进阶学习 之 Task

Task就像是Gradle项目中的小小机器人,每个机器人都有特定的工作要做,而且它们还可以根据项目的需要调整自己的工作方式。通过组合不同的Task,你可以构建起复杂的构建流程。

一切总会归于平淡 1939

详细Ubuntu 22.04 配置最新UR机械臂仿真环境(ros2-humble, ur-sim, ur-ros2-driver)

使用ubuntu22.04.01和ur-sim, ur-driver进行ur机械臂的仿真

verloge的博客 1万+

Gradle 核心之 Task

只有 Task 才可以在Gradle的执行阶段去执行(其实质是执行的 Task 中的一系列 Action),所以 Task 的重要性不言而喻。Task 的定义方式有如下两种:Task 的配置方式也有如下两种:配置了 group 后可以在 Android Studio 的 Gradle 面板看到对应的 Task Group 及其分组下的 Tasks,如下图所示:一般来说都推荐为我们的 task 配置 group,便于我们查找 task。

Dream It Possible 1972

15. GD32E230定时器实战:基于TIMER5的1秒LED闪烁中断配置详解

本文详细讲解了如何在GD32E230微控制器上配置TIMER5定时器,实现精准的1秒LED闪烁中断。内容涵盖从时钟开启、参数计算、中断设置到服务函数编写的完整流程,重点解析了预分频值与周期值的配置方法,帮助开发者掌握硬件定时器的核心应用。

weixin_29092787的博客 135

《C语言小游戏之贪吃蛇程序代码》

//为广大编程游戏爱好者提供一个参考的游戏源代码#include&lt;stdio.h&gt;#include&lt;conio.h&gt;#include&lt;windows.h&gt;#include&lt;time.h&gt;#define framex 5#define framey 5#define wide 20#define high 20int i,j,a[2];//将光标移动到...

qq_42052821的博客 2万+

Android Gradle的神奇之处 ---- Gradle构建和Task引入

Gradle构建和Task引入

qq_33235287的博客 2330

Balser相机的硬件触发实战:从连线到信号处理

本文详细介绍了Balser相机硬件触发的实战应用,从硬件接线、信号定义到软件配置(Pylon Viewer及API)提供了完整指南。重点阐述了如何利用外部物理电信号实现微秒级精准触发,解决工业场景下的同步与延迟问题,并分享了信号调理、抗干扰等高级实战经验。

y9z0a1b的博客 336

android定义 task,Android Gradle 自定义Task 详解

一:Gradle 是什么Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。基于 groovy 脚本构建,其 build 脚本使用 groov...

weixin_29356815的博客 309

【OpenClaw从入门到精通】第35篇:电商“龙虾”掘金记——用OpenClaw实现小红书/抖音/淘宝全自动矩阵运营(2026实测版)

2026年,OpenClaw智能体已成为电商运营的“效率革命工具”,其多平台自动化能力让单人可完成传统3-5人的工作量。本文基于真实商业案例(来源:海报新闻、阿里云开发者社区等),系统拆解OpenClaw在小红书、抖音、淘宝的全链路运营方案:从阿里云部署搭建基础环境,到三大平台核心技能安装配置,再到跨平台矩阵工作流落地;同时揭秘代部署、模板售卖、轻定制、内容套利四大变现模式,并详解Token成本控制、安全风险规避等关键问题。文中所有代码均经过2026年3月实测验证,提供完整可复现的技术方案,帮助读者快速搭建

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2034

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

记一次gradle 自动化切换环境task研究过程

一.说明 项目中使用了第三方框架以及对应后台不懂的接口环境,导致在不同的编译环境时要去手动替换很多配置文件,为了减少打包时间,决定通过gradle去替换配置环境。 二.Gradle Task task顾名思义是一个任务,可以自定义自己想做的任务。 1. 创建task的方式 (1).使用task 后带任务名称 加上执行闭包{} task t1{ println 't1' } (2).任务名称后加上圆括号 task t2() { println 't2' } (3).在括号

xiaofei924的博客 664

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Gradle:构建脚本概要

一、构建块 1.每个构建块都包含三个基本构建块:project、task和property; 2.每个构建块包含至少一个project,进而又包含一个或多个task; 3.project和task暴露的属性可以用来控制构建快;

1024工场 2971

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Gradle 指南

Gradle 全方位使用指南:从基础操作到 IDE 配置_gradle使用教程-优快云博客Gradle官网:https://docs.gradle.org/关键字文档:https://docs.gradle.org/current/dsl/Gradle插件搜索:https://plugins.gradle.org/Java,Spring,Android等例子:https://docs.gradle.org/current/samples/index.html自定义task的文档:https://docs.

cgk_ALEM的博客 1595
上一篇: Android Architecture Components 只看这一篇就够了
下一篇: Android ADB 命令行
Android从高级到---
博客等级 码龄8年 15粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值