1. 两种实现形式
gradle 插件和 .gradle 文件本质上没有区别,但是 gradle 插件使用了独立的封装构建逻辑,相当于设计模式的开闭原则,整体体验更友好
gradle 插件的核心类是Plugin
,一般使用 Project 作为泛型实参,当调用者需要引入插件时,先调用Plugin.apply()
方法
class CustomPlugin implements Plugin<Project>{
@Override
void apply(Project project){
println 'Hello Plugin'
}
}
如果根据实现形式分类(CustomPlugin 的代码位置),可以把 gradle 插件分为 2类:
- 脚本插件:
apply plugin: CustomPlugin
- 二进制插件/对象插件:在一个单独的插件模块中定义,其它模块通过
Plugin ID
应用插件。因为这种方式发布和复用更加友好,一般接触到的 gradle 插件都是指二进制插件的形式
脚本插件:
同普通的 gradle 脚本编写形式一样,既可以写在 build.gradle 中,也可以自己新建个 gradle 脚本文件;比如上面的 CustomPlugin 写入 app/build.gradle下后
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
// id 'com.monk.customlib'
}
apply plugin:CustomPlugin
class CustomPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
println 'Hello Plugin'
}
}
/*
> Configure project :app
Hello Plugin
*/
2. 应用插件的步骤
- 将插件添加到 classpath,我们的 gradle 构建脚本才能应用插件
-
本地依赖:直接依赖本地插件源码
buildscript{ dependencies { classpath project(":easyupload") } }
-
远程依赖:已发布到 Maven 仓库的插件,一般我么都是用这种方式依赖官方或第三方实现的 Gradle 插件
buildscript{ repositories{ google() jcenter() } dependencies{ classpath 'com.android.tools.build:gradle:7.0.2' } }
-
使用
apply
应用插件在需要使用插件的
.gradle
脚本中使用apply
应用插件,这会创建一个新的Plugin
实例,并执行Plugin.apply
方法apply plugin : 'com.android.applicaiton' // or plugins{ id 'com.android.application' }
3. buildSrc
插件模块的名称是任意的,除非使用一个特殊的名称buildSrc
,这是默认的插件模块;
-
buildSrc
会被自动识别为参与构建的模块,所以不需要再settings.gradle
中 include -
buildSrc
会自动被添加到构建脚本的 classpath 下,无需手动添加buildscript{ dependencies{ // 无需手动添加 // classpath project(":buildSrc") } }
-
buildSrc
的 build.gradle 执行时机遭遇其它 Project