Gradle插件基础(1)

插件的概念

Gradle本身提供了基本的概念和 核心框架,这两样东西,完全不涉及到 业务内容,它们只提供业务可能用到的抽象过程,而业务内容(涉及到真实应用场景的逻辑性质的代码)全部以外来扩展插件的方式实现。Gradle本身内置了一些常用插件,他们基本上能帮助我们处理大部分场景,但是也有例外,有些插件需要我们手动去开发,甚至发布。

插件的作用

上面说过,插件是核心模块的扩展。我们将一个gradle plugin应用到我们的项目中之后,可以帮我们处理构建过程中的很多事情,举个例子:

  1. 添加扩展属性

    android{} 内部诸多的配置项,就是 com.android.tools.build:gradle插件为project对象(gradle默认的顶层对象)添加的一个扩展,我们在android{}中指定sdk版本以及其他参数

  2. 添加新的task到你已有的task列表中

    添加自定义的task,然后与已有任务挂钩,是非常基础的改变打包流程的做法。

  3. 添加依赖配置

    当我们编译项目时,如果需要用到第三方依赖,gradle插件可以帮助我们设定第三方依赖库的地址

  4. 预设约定

    比如我们的java源代码的位置,默认就是src/main/java,如果我们想把其他某些地方的java文件也打成class,dex到最终的apk内部,也能用插件来做到。

如何应用插件

假如有一个新的插件,我们希望它在我们的项目中发挥作用,应该如何做?

首先来看看插件的分类:

二进制插件

二进制插件有几个要素:

  1. 实现 org.gradle.api.Plugin接口
  2. 进行全局id的注册

它的本质是一个jar包,内部包含了插件逻辑,可编写的语言包括 java, kotlin以及groovy,

假如我们实现了一个二进制插件,完整类名为:com.test.my.MyPlugin,那么应用它的写法为:

apply plugin: ‘com.test.my.MyPlugin’

必须确保完整类名全局唯一。

脚本插件

脚本插件,则是 以纯 gradle文件的形式体现的 插件逻辑。

比如,我们设定了一个version.gradle用于保存所有的版本号:

// ext是rootProject的成员属性,
// 注意,所有的gradle文件都默认引用了 全局的rootProject
ext {
    versionName = '1.0.0'
    versionCode = 100
}

那么,我们在同级目录下的build.gradle文件中则可以直接这么用:

相对路径的写法:

apply from: "../version.gradle"

或者 用 rootProject对象来获取文件:

apply from: rootProject.file('version.gradle')

总是就是让当前的build.gradle引用到 其他位置的gradle文件,类似 java的import操作。

同样,如果是网络上的 gradle文件,则可以直接使用:

apply from: 'https://example.com/version.gradle'

apply的多种用法

map方式

剖析刚才的 apply from的写法,其实后面的 from:'xxxx' 是一个 Map的写法,方法的原型是:

void apply(Map<String, ?> options);

闭包方式

还有闭包的写法:

apply {
    from '../version.gradle'
}

它的原型则是:

void apply(Closure closure)

另外,还有 action的写法:

action方式

void apply(Action<? super ObjectConfigurationAction> action);

具体写法为:

apply (new Action<ObjectConfigurationAction>() {
    @Override
    void execute(ObjectConfigurationAction objectConfigurationAction) {
        objectConfigurationAction.from('../version.gradle')
    }
})

以上三种写法效果等同。

应用第三方插件

常规方式

第三方发布的二进制插件,我们必须在 使用之前先下载它的下载仓库,位置在 全局的build.gradle中:

比如:

buildscript {
    repositories {
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
    }
}

比如上面的写法,buildScript配置,就是配置了 远程仓库地址为:google(). 实际地址为:https://dl.google.com/dl/android/maven2/

然后设定要使用的插件的 DSL参数,包括 groupname,以及version,分别对应上面的:com.android.tools.build , gradle, 4.0.0 这3个。

除此之外,还有另外一种写法:

使用plugins DSL

plugins {
    id 'com.android.tools.build:gradle' version '4.0.0'
}

效果等同。

必须注意的是

如果是要apply一个官方仓库的插件的话,前面 buildScript 的配置可以不写,因为内置了,在官方插件仓库有很多优秀的插件,好用的轮子,可以直接找到而不需要自己开发,这就是gradle的生态。

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
img
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值