没有合适的资源?快使用搜索试试~ 我知道了~
手把手带你自定义 Gradle 插件 —— Gradle 系列(2).doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 43 浏览量
2022-07-09
13:49:43
上传
评论
收藏 1.6MB DOC 举报
温馨提示
试读
22页
手把手带你自定义 Gradle 插件 —— Gradle 系列(2).doc
资源推荐
资源详情
资源评论
手把手带你自定义 Gradle 插件 —— Gradle 系列(2)
前言
Gradle 本质上是高度模块化的构建逻辑,便于重用并与他人分享。例如,我们熟悉的
Android 构建流程就是由 Android Gradle Plugin 引入的构建逻辑。在这篇文章里,我将带你
探讨 Gradle 插件的使用方法、开发步骤和技巧总结。
这篇文章是全面掌握 Gradle 构建系统系列的第 2 篇:
1、Gradle 基础
2、Gradle 插件
3、Gradle 依赖管理
4、APG Transform
请点赞加关注,你的支持对我非常重要,满足下我的虚荣心。
🔥 Hi,我是小彭。本文已收录到 · Android-NoteBook 中。这里有 Android 进阶成长知
识体系,有志同道合的朋友,欢迎跟着我一起成长。(联系方式在 )
1. 认识 Gradle 插件
1.1 什么是 Gradle 插件
Gradle 和 Gradle 插件是两个完全不同的概念,Gradle 提供的是一套核心的构建机制,
而 Gradle 插件则是运行在这套机制上的一些具体构建逻辑,本质上和 .gradle 文件是相同。
例如,我们熟悉的编译 Java 代码的能力,都是由插件提供的。
1.2 Gradle 插件的优点
虽然 Gradle 插件与 .gradle 文件本质上没有区别,.gradle 文件也能实现 Gradle 插件类
似的功能。但是,Gradle 插件使用了独立模块封装构建逻辑,无论是从开发开始使用来看,
Gradle 插件的整体体验都更友好。
逻辑复用: 将相同的逻辑提供给多个相似项目复用,减少重复维护类似逻辑开销。当
然 .gradle 文件也能做到逻辑复用,但 Gradle 插件的封装性更好;
组件发布: 可以将插件发布到 Maven 仓库进行管理,其他项目可以使用插件 ID 依赖。
当然 .gradle 文件也可以放到一个远程路径被其他项目引用;
构建配置: Gradle 插件可以声明插件扩展来暴露可配置的属性,提供定制化能力。当
然 .gradle 文件也可以做到,但实现会麻烦些。
1.3 插件的两种实现形式
Gradle 插件的核心类是 Plugin,一般使用 Project 作为泛型实参。当使用方引入插件后,
其实就是调用了 Plugin#apply() 方法,我们可以把 apply() 方法理解为插件的执行入口。例
如:
MyCustomGradlePlugin.groovy
public class MyCustomGradlePlugin implements Plugin {
@Override
void apply(Project project) {
println “Hello.”
}
}
如果根据实现形式分类(MyCustomGradlePlugin 的代码位置),可以把 Gradle 插件分为
2 类:
1、脚本插件: 脚本插件就是一个普通的脚本文件,它可以被导入都其他构建脚本中。有
的朋友说脚本插件也需要使用 Plugin 接口才算脚本插件,例如:
build.gradle
apply plugin: MyCustomGradlePlugin
class MyCustomGradlePlugin implements Plugin {
...
}
2、二进制插件 / 对象插件: 在一个单独的插件模块中定义,其他模块通过 Plugin ID
应用插件。因为这种方式发布和复用更加友好,我们一般接触到的 Gradle 插件都是指二进
制插件的形式。
1.4 应用插件的步骤
我们总结下使用二进制插件的步骤:
1、将插件添加到 classpath: 将插件添加到构建脚本的 classpath 中,我们的 Gradle 构
建脚本才能应用插件。这里区分本地依赖和远程依赖两种情况。
本地依赖: 指直接依赖本地插件源码,一般在调试插件的阶段是使用本地依赖的方式。
例如:
项目 build.gradle
buildscript {
...
dependencies {
// For Debug
classpath project(“:easyupload”)
}
}
远程依赖: 指依赖已发布到 Maven 仓库的插件,一般我们都是用这种方式依赖官方或
第三方实现的 Gradle 插件。例如:
项目 build.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:3.5.3’
// 也可以使用另一种等价语法:
classpath group: ‘com.android.tools.build ‘, name: ‘gradle ‘, version: ‘3.5.3’
}
...
}
2、使用 apply 应用插件: 在需要使用插件的 .gradle 脚本中使用 apply 应用插件,这
将创建一个新的 Plugin 实例,并执行 Plugin#apply() 方法。例如:
apply plugin: ‘com.android.application’
// 或者
plugins {
// id «plugin id» [version «plugin version»] [apply «false»]
id ‘com.android.application’
}
注意:不支持在一个 build.gradle 中同时使用这两种语法。
1.5 特殊的 buildSrc 模块
插件模块的名称是任意的,除非使用了一个特殊的名称 “buildSrc”,buildSrc 模块是 Gradle
默认的插件模块。buildSrc 模块本质上和普通的插件模块是一样的,有一些小区别:
1、buildSrc 模块会被自动识别为参与构建的模块,因此不需要在 settings.gradle 中使用
include 引入,就算引入了也会编译出错:
Build OutPut:
‘buildSrc’ cannot be used as a project name as it is a reserved name
2、buildSrc 模块会自动被添加到构建脚本的 classpath 中,不需要手动添加:
buildscript {
...
dependencies {
// 不需要手动添加
// classpath project(“:buildSrc”)
}
}
3、buildSrc 模块的 build.gradle 执行时机早于其他 Project:
Executing tasks: [test]
settings.gradle:This is executed during the initialization phase.
> Configure project :buildSrc
build.gradle:buildSrc.
> Task :buildSrc:compileJava NO-SOURCE
> Task :buildSrc:compileGroovy NO-SOURCE
> Task :buildSrc:pluginDescriptors UP-TO-DATE
> Task :buildSrc:processResources NO-SOURCE
> Task :buildSrc:classes UP-TO-DATE
> Task :buildSrc:jar UP-TO-DATE
> Task :buildSrc:assemble UP-TO-DATE
> Task :buildSrc:pluginUnderTestMetadata UP-TO-DATE
> Task :buildSrc:compileTestJava NO-SOURCE
> Task :buildSrc:compileTestGroovy NO-SOURCE
> Task :buildSrc:processTestResources NO-SOURCE
> Task :buildSrc:testClasses UP-TO-DATE
> Task :buildSrc:test NO-SOURCE
剩余21页未读,继续阅读
资源评论
书博教育
- 粉丝: 1
- 资源: 2837
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功