写给 Android 开发者的 Gradle 系列(二)撰写 task

本文是针对Android开发者的一篇Gradle任务撰写教程,详细介绍了如何声明和扩展task,包括task的内容格式、依赖关系,以及实战示例,如安装和启动apk,hook assets。文章还探讨了Gradle task的执行顺序和依赖管理,帮助开发者更好地理解和利用Gradle进行项目构建。
摘要由CSDN通过智能技术生成

如果你对本文感兴趣,也许你对我的公众号也会有兴趣,可扫下方二维码或搜索公众微信号:mxszgg

本文基于 Android Gradle plugin 3.0.1

前言

app/build.gradle 中添加如下依赖:

compileOnly ‘com.android.tools.build:gradle:3.0.1’

即可在 External Libraries 中看到关于 Gradle plugin 的源码。

这里写图片描述

Gradle 源码如何引入将会在下一节中介绍

task 撰写

task 声明

根据官方文档Task#create() 可以知道,task 的基本写法可以是如下四种:

task myTask
task myTask { configure closure }
task (myTask) { configure closure }
task (name: myTask) { configure closure }

每一个 task 都有自己的名字,这样开发者才能调用它,例如调用上面的 task:

./gradlew myTask

但是有一个问题,倘若当前项目的 app module 和 a module 都含有一个名为 myTask 的 task,那么会不会起冲突,该如何调用它们?答案是不会冲突,调用方式如下:

./gradlew app:myTask(调用 app module 的 myTask)

./gradlew a:myTask(调用 a module 的 myTask)

通过 ProjectName:taskName 的形式便可以指定唯一绝对路径去调用指定 Project 的指定 task 了。

扩展

根据 Task#create() 可以知道,task 的创建是可以声明参数的,除了上述的 name 参数之外,还有如下几种:

  • type:默认为 DefaultTask。类似于父类。在后文中将会提及该参数。

  • dependsOn:默认为[]。希望依赖的 tasks,等同于 Task.dependsOn(Object... path) 中的 path。在后文中将会提及该参数。

  • action:默认为 null。等同于 Task.doFirst { Action } 中的 Action。

    task (name: actionTest, action: new Action<Task>() {
      @Override
      void execute(Task task) {
        println 'hello'
      }
    }) {
    }
    

    等同于

    task (name: actionTest) {
    	doFirst {
    		println 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值