8--Gradle进阶 - Gradle任务的入门、任务行为 Gradle Task Gradle 项目工程的管理 实质上是 Task 对象的集合。...另外,一个 Task 可以读取和设置Project 的Property 以完成特定的操作。 下面我们来看看如何编写 Gradle Task 任务。...任务入门 可参考官方文档:https://docs.gradle.org/current/userguide/tutorial_using_tasks.html 我们在 build.gradle 文件编写...-i 打印 info 的参数,如下: gradle -i task3 1685894792232 提示 1 :task3 的配置段是在配置阶段完成 提示 2 :task3 的doFirst、doLast...**提示 3:**区分任务的配置段和任务的行为,任务的配置段在配置阶段执行,任务的行为在执行阶段执行 任务的行为 doFirst、doLast 两个方法可以在任务内部定义,也可以在任务外部定义: //
文章目录 一、执行 Gradle 任务的简化版命令 二、同时执行多个 Gradle 任务的命令 Android Plugin DSL Reference 参考文档 : Android Studio 构建配置官方文档...任务的简化版命令 ---- 如果执行一个 Gradle 任务 , 该任务名称比较长 , 如 compileDebugAndroidTestSources 任务 , 可以使用波峰简化名称 ,...也就是取 compileDebugAndroidTestSources 的首字母 c , 然后取后面的大写字母 , 最终使用 cDATS 作为该任务的简称 ; 在 Terminal 面板中 , 可以执行...gradlew :app:cDATS 命令 , 来执行 compileDebugAndroidTestSources 的 Gradle 任务 ; 二、同时执行多个 Gradle 任务的命令 ----...如果需要同时执行多个 Gradle 任务的命令 , 可以使用 空格 将多个任务隔开 , 如想要同时执行 compileDebugAndroidTestSources 任务 和 assemble 任务 ,
10--Gradle进阶 - Gradle任务的执行 前言 在前面的篇章中,我们尝试执行了 gradle 的 task,但是不清楚有哪些语法,下面来介绍一下。...【当前 project,不包含父、子】的已分配给任务组的那些任务。...拓展:gradle 任务名是缩写: 任务名支持驼峰式命名风格的任务名缩写,如:connectTask 简写为:cT,执行任务 gradle cT。...拓展 1:前面提到的Gradle 指令本质:一个个的task[任务], Gradle 中所有操作都是基于任务完成的。...项目报告相关任务 2.1 gradle projects : 列出所选项目及子项目列表,以层次结构的形式显示 2.2 gradle tasks: 列出所选项目【当前 project,不包含父、子】的已分配给任务组的那些任务
11--Gradle进阶 - Gradle任务的定义方式、指定任务的属性 前言 在前面的篇章中,我们写了不少 task 任务,但是任务完整的定义方式,指定哪些任务属性 没有一个归纳的总结。...任务定义方式 任务定义方式,总体分为两大类: 一种是通过 Project 中的task()方法 另一种是通过tasks 对象的 create 或者register 方法。...println "taskF...." } 定义任务的属性 当然:我们也可以在定义任务的同时指定任务的属性,具体属性有: img 在定义任务时也可以给任务分配属性: 定义任务的时候可以直接指定任务属性...定义任务的属性 //①.Z是任务名,前面通过具名参数给map的属性赋值,以参数方式指定任务的属性信息 task(group: "lijw", description: "this is task Z",...lijw 组 clean.group("lijw") 可以在 idea 中看到: 上面自定义的那几个任务和 gradle 自带的 clean 任务已经跑到:lijw 组了。
12--Gradle进阶 - Gradle任务的类型 任务类型 前面我们定义的task 都是DefaultTask 类型的,如果要完成某些具体的操作完全需要我们自己去编写gradle 脚本,势必有些麻烦...,那有没有一些现成的任务类型可以使用呢?...有的,Gradle 官网给出了一些现成的任务类型帮助我们快速完成想要的任务,我们只需要在创建任务的时候,指定当前任务的类型即可,然后即可使用这种类型中的属性和API 方法了。...如果想看更详细的gradle 自带Task 类型,请参考官方文档: https://docs.gradle.org/current/userguide/custom_tasks.html#header..., Delete) { delete buildDir } 我们希望可以删除 build 的目录,如下: 1686273999540 执行该任务,如下: gradle myClean 1686274054276
文章目录 一、为自定义 Gradle 任务添加依赖任务 二、Gradle 任务依赖执行顺序控制 Android Plugin DSL Reference 参考文档 : Android Studio 构建配置官方文档...任务添加依赖任务 ---- 如果 Gradle 任务 A 的执行 是在 Gradle 任务 B 执行的基础上的 , 那么可以将任务 B 设置为 任务 A 的依赖 ; 代码示例 : 将 sayHello...任务和 sayHello2 任务设置为 sayHello3 任务的依赖任务 , 如果要执行 sayHello3 任务 , 则需要先执行 sayHello 和 sayHello2 任务 ; task sayHello...任务依赖执行顺序控制 ---- ① 默认执行顺序 : 如果一个 Gradle 任务依赖于多个任务 , 则通过 dependsOn: 参数设置其执行顺序 , 按照该参数列表中的元素顺序执行 ; task...设置为 sayHello2 任务的依赖 , 执行时 先执行 sayHello 任务 , 然后执行 sayHello2 任务 ;
任务结果标签 当 Gradle 执行一个任务时,它会在控制台和 Tooling API 根据任务结果给任务打标签。...下面是 Gradle 的标签以及对应的条件 (无标签)或者 EXECUTED 任务执行了它的操作。...任务有操作并且 Gradle 已经决定作为构建的一部分来执行 任务没有操作但有些依赖,并且执行了某些依赖项。参考下面的生命周期任务。...Tooling API 是指 Gradle 提供的编程 API,通常给 IDE,CI 服务器使用的 创建任务 最简单方便的定义方式:定义一个 hello 任务 这是使用 DSL 的语法 task...而任务规则就是在 Gradle 找不到任务时应用的规则,例如我们可以在找不到任务时打印一句话或者执行其他操作。
从接口复制的描述:任务 返回此任务所属的任务组。 在向用户显示任务列表时,任务组在报告和用户界面中用于将相关任务分组在一起。...此任务的任务组。可能为空。...从接口复制的描述:任务 设置此任务所属的任务组。 在向用户显示任务列表时,任务组在报告和用户界面中用于将相关任务分组在一起。...此任务的任务组。可以为空。...Gradle 任务分组以及分组下的任务 和 任务描述 ;
9--Gradle进阶 - Gradle任务的依赖方式 前言 Gradle Task 任务之间是可以配置依赖的,那么为什么要配置依赖? 因为任务有可能依赖其他任务执行完毕之后,才可以开始执行。...对于这种情况,我们就可以通过任务的依赖来控制。 下面来介绍一下任务的依赖方式。...任务的依赖方式 Task 之间的依赖关系可以在以下几部分设置: 参数依赖 内部依赖 外部依赖 方式一:参数方式依赖 下面我们定义 task A、task B,其中 task C 依赖 A B 两个任务执行完毕后...build.gradle 文件中定义: // 在subproject02定义task task subTaskB { //依赖根工程下的subject01中的任务subTaskA :跨项目依赖。...拓展 2:重复依赖的任务只会执行一次,比如: A->B、C B->C 任务A 依赖任务 B 和任务 C、任务 B 依赖C 任务。执行任务A 的时候,显然任务C 被重复依赖了,C 只会执行一次。
{ // 执行 Gradle 分析完成之后的代码 } 下图中 , Gradle 面板中的任务 , 就是生成的一系列任务 ; 只有在 Gradle 任务生成完毕之后 , 才能搜索到这些任务 ,...: https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html 如果任务 A 的输出 作为 任务 B 的输入 , 则这两个任务就存在隐式的依赖关系...; 这里将 packageDebug 任务的输出 , 作为 Zip 类型任务的输入 , 那么 Zip 类型任务 依赖于 packageDebug 任务 ; 首先要查找 packageDebug 任务..., 查询到该任务后 , 拿到该任务的输出 ; 查找 Gradle 任务的操作 , 必须在 Project#afterEvaluate 函数的闭包参数中执行 , 否则静态查找时查找不到 , 同时结合 【Android...Gradle 插件】自定义 Gradle 任务 ⑮ ( Gradle 自带 Zip 任务使用 | Zip 任务简介 | 代码示例 ) 博客中的压缩文件代码 ; 将 packageDebug 任务的输出文件进行
文章目录 一、org.gradle.api.tasks.bundling.Zip 任务简介 二、Zip 任务代码示例 Android Plugin DSL Reference 参考文档 : Android.../gradle/api/DefaultTask.html org.gradle.api.tasks.Delete 自带任务 ( clean 任务类型 ) 文档 : https://docs.gradle.org...org.gradle.api.tasks.bundling.Zip 自带任务 用于 对 目录 或 文件 进行 zip 格式的压缩 , org.gradle.api.tasks.bundling.Zip...; 特别注意 : 设置的 被压缩的目录或文件 , 压缩包的输出目录 , 尽量是 build 目录下 , 也就是 "${buildDir}/" 目录下 ; public abstract class AbstractArchiveTask...---- Zip 任务代码示例 : 该任务定义在了 根目录下的 build.gradle 构建脚本中 ; task zip(type: Zip){ // 设置输出压缩包名称 archiveName
#upToDateWhen 方法 , 在传入的闭包参数中 , 返回值为 true 时 , 在编译时遇到该 自定义 Gradle 任务 , 如果 第二次执行 且 输入 / 输出 相同 , 会跳过该任务 ,...upToDateWhen 方法 传入的 闭包参数 的 返回值为 false , 无论执行多少次 , 无论任务输入 / 输出 是否相同 , 该任务都不会被跳过 , 强制执行 ; // 设置第二次执行时是否跳过...预置任务 ---- 除了自定义的 Gradle 任务之外 , Gradle 官方定义了一系列的预置的任务 , 如在 Android 工程跟目录 build.gradle 构建脚本中定义的如下任务 ,...构建脚本中调用的方法 ; 在 Gradle 官方网站中 , 定义了一系列的 Task 任务类型 , 可以在 https://docs.gradle.org/current/userguide/userguide.html...可以查看所有的官方定义的任务类型 ;
文章目录 一、Gradle 任务的输出和输出 二、@Optional 注解 二、UP-TO-DATE 避免重复执行任务 Android Plugin DSL Reference 参考文档 : Android.../gradle/api/DefaultTask.html 一、Gradle 任务的输出和输出 ---- Gradle 任务通常都有 输入 和 输出 内容 ; 如 : other 分组下的 compileDebugJavaWithJavac...任务 , 该任务的主要作用是 使用 javac 编译器工具 将 Java 源代码文件 编译成 Class 字节码文件 ; 则上述任务的 输入 为 Java 源代码文件 , 输出 为 Class 字节码文件...; 可以使用 @Input 和 @Output 注解的形式 , 设置 Gradle 任务的 输入 和 输出 ; /** * 自定义任务类 */ class MyTask extends DefaultTask...任务的 输入 和 输出 是任务是否执行的标志 , 可以避免 Gradle 任务被重复执行 ; 如果 Gradle 任务执行完毕后 , 有了一个 输入 和 输出 值 ; 再次执行该 Gradle 任务
文章目录 一、Gradle 面板显示任务列表 二、自定义任务生成与显示分组 Android Plugin DSL Reference 参考文档 : Android Studio 构建配置官方文档 :...面板显示任务列表 ---- 点击 Android Studio 右侧的 Gradle 面板 , 可以查看该 Android 工程的一系列 Gradle 任务 , 这些 Task 任务都分好了组 , 有如下分组...; 核心步骤如下 : 二、自定义任务生成与显示分组 ---- 在 Gradle 脚本中 , 使用 task 自定义的任务 , 默认分组在 other 分组下面 , 如下图所示 : 使用 //...自定义任务 , 输出扩展属性值 task sayHello { // 直接调用 hello println hello // 调用任务自身的扩展属性 println...hello2 } 自定义的 Task 任务 sayHello , 在 other 分组中显示 ; 创建完 task 任务 sayHello2 后 , 会提示 " Gradle files have changed
函数 ---- Task#finalizedBy 函数 的作用是为 Gradle 任务 设置任务执行完毕后执行的任务 ; A.finalizedBy B 的作用是 A 任务执行完毕后 , 执行 B 任务...为此任务添加给定的终结器任务。...有关可用于指定终结器任务的对象类型的描述,请参阅此处。 Parameters: paths - The tasks that finalize this task....完成此任务的任务。...执行任务顺序示例分析 : A.finalizedBy B B.dependsOn C 上述三个任务 , A 执行完毕后执行 B , B 依赖于 C , 执行 B 之前要先把 C 执行了 , 这里的执行顺序为
文章目录 一、Gradle 扩展属性简介 二、Gradle 自定义 task 任务示例 ( 扩展属性示例 ) Android Plugin DSL Reference 参考文档 : Android Studio.../tasks/testing/Test.html LibraryExtension ( Library 依赖库的 build.gradle#android 配置 ) 文档 : android-gradle-dsl.../org/gradle/api/Project.html Android 工程中的 build.gradle 构建脚本 , 在编译时会被自动转为 org.gradle.api.Project 类 , 在...; 在 build.gradle 中直接使用 Groovy 代码即可实现 对 Project 类的扩展 ; 在 Groovy 中定义普通属性代码如下 : 普通属性是局部变量 , 只能在本构建脚本中使用...} 二、Gradle 自定义 task 任务示例 ( 扩展属性示例 ) ---- 在 build.gradle 中定义 变量 , 然后自定义 task 任务 , 输出该变量 , 代码如下 : // 定义局部变量
文章目录 一、DefaultTask 中的任务输入和输出属性 ( DefaultTask#taskInputs | DefaultTask#taskOutputs ) 二、TaskInputs 任务输入接口.../gradle/api/DefaultTask.html 一、DefaultTask 中的任务输入和输出属性 ( DefaultTask#taskInputs | DefaultTask#taskOutputs...Task { } DefaultTask 又继承了 AbstractTask 类 , 在 AbstractTask 类中 , 有 taskInputs 和 taskOutputs 两个成员变量 , 分别代表任务的...任务中 , 可以调用 TaskInputs#getFiles 函数 , 获取设置的输入文件集合 , 类型为 FileCollection , 函数原型如下 : FileCollection getFiles.../** * 使用 @TaskAction 注解指定任务需要执行的方法 */ @TaskAction void run() { println 'MyTask
/api/Task.html 在自定义 Gradle 任务中 , 可以实现 Task 接口的 doLast 函数 , 其作用是在 任务执行后 最后执行的内容 , 任务中可以执行多个 Task#doLast...将给定的闭包添加到此任务的操作列表的末尾。 闭包在执行时作为参数传递给此任务。...要执行的操作闭包。 Returns: This task....、自定义 Gradle 任务代码示例 ---- 代码示例 : task Hello { doFirst { // 调用 Hello 任务时 , 先调用该闭包内容...命令 , 最终的执行结果如下 :
Gradle是以Groovy语言编写的一套构建脚本的DSL,由于Groovy语法的优雅,所以导致Gradle天生就有简洁、可读性强、灵活等特性。...首先我们要了解gradle的日志输出,在执行gradle task时可以适时的调整信息输出等级,以便更方便的观看执行结果。 日志输出: Gradle中的日期有6个层级。...gradle command 所有的任务都配值在build.gradle中, 比如其中有这样一个task task hello << { println 'hello world!'...} 执行任务 -q gradle hello :hello hello world!...执行任务时可以只执行前缀或者简写 同时执行某一个目录下的gradle可以到其目录下执行,也可以gradle -p -b learnGradle helloWorld 这条命令是调用learnGradle
概述 在 Android Studio 中,右侧 Gradle 面板 → app → Tasks → other/build 下的打包任务(如 assemble、bundle 等)并非手动定义,而是由...Android Gradle Plugin (AGP) 根据项目中的构建配置动态生成。...这些任务是 Android 构建系统的核心组成部分,理解其生成机制和配置方式,对高效、安全地发布应用至关重要。...一、Gradle 打包任务详解:自动生成机制 Gradle 面板中列出的任务(尤其是 other 和 build 分类下的)是由 AGP 在解析 buildTypes、productFlavors、flavorDimensions...这些任务本质上是 Gradle 的 Task Provider,由 com.android.build.api.variant API 在配置阶段创建,开发者无需手动编写任务逻辑。