开发环境
-
Android Studio Ladybug Feature Drop | 2024.2.2 Patch 2
Build #AI-242.23726.103.2422.13103373, built on February 22, 2025
-
JDK 17
-
Gradle-8.7
Gradle 自定义插件方式
方式一
在项目或各模块 build.gradle 文件中实现 Plugin 接口,在对应文件中通过 apply 引入对应插件,适用于当前文件。
project - build.gradle.kts
// 实现插件
class RootPlugin : Plugin<Project> {
override fun apply(project: Project) {
println("RootPlugin")
project.tasks.register("rootPluginTask1") {
doLast {
println("do RootPluginTask1")
}
}
project.tasks.register("rootPlugin1Task2") {
doLast {
println("do RootPluginTask22")
}
}
}
}
project - build.gradle.kts
apply<RootPlugin>()
// 或者
// apply {
// plugins.apply(RootPlugin::class.java)
//}
方式二
在项目中新建 buildSrc 模块,该模块下代码可直接参与 gradle 构建,适用于同一个项目中所需使用的插件,无需依赖插件本地编译jar。
project - buildSrc - BuildSrcPlugin.kt
package com.miyako.plugin
class BuildSrcPlugin : Plugin<Project> {
override fun apply(project: Project) {
println("BuildSrcPlugin")
project.tasks.register("buildSrcPluginTask1") {
it.doLast {
println("doLast buildSrcPluginTask1")
}
}
project.tasks.register("buildSrcPluginTask2") {
it.doLast {
println("doLast buildSrcPluginTask2")
}
}
}
}
project - buildSrc - build.gradle.kts
gradlePlugin {
plugins {
// 创建插件名
create("myPlugin") {
// 声明 Plugin Id
id = "com.miyako.buildsrc.plugin"
// 声明 Plugin 实现类
implementationClass = "com.miyako.plugin.BuildSrcPlugin"
}
}
}
在模块中引入插件
plugins {
id("com.miyako.buildsrc.plugin")
}
或者
apply(plugin = "com.miyako.buildsrc.plugin")
或者
// 这个方式不创建 PluginId
apply<BuildSrcPlugin>()
方式三
新建模块用于单独编译 Plugin,通常适用于自定义插件库,发布到本地仓库或远端仓库。
project - plugin - CustomPlugin.kt
package com.miyako.plugin
class CustomPlugin : Plugin<Project> {
override fun apply(project: Project) {
println("CustomPlugin")
project.tasks.register("customPluginTask") {
it.doLast {
println("doLast customPluginTask 111")
}
}
}
}
project - plugin - build.gradle.kts
gradlePlugin {
plugins {
// 声明 Plugin
create("customPlugin") {
id = "com.miyako.CustomPlugin"
implementationClass = "com.miyako.plugin.CustomPlugin"
}
}
}
publishing {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
// 声明依赖库
groupId = "com.miyako.plugin3"
// 声明模块
artifactId = "plugin-module"
// 声明版本
version = "1.0.0"
}
}
repositories {
maven {
// 声明本地编译生成 jar 包位置
setUrl(layout.buildDirectory.dir("./repo"))
}
}
}
指定本地依赖库位置
project - settings.gradle.kts
pluginManagement {
repositories {
maven(uri("./plugin/build/repo"))
}
}
引入插件依赖
project - root - build.gradel.kts
buildscript {
dependencies {
// 引入本项目的插件模块
classpath("com.miyako.plugin3:plugin-module:1.0.0")
}
}
声明插件方式和前两种方式相同。PS: 在 project - build.gradle.kts 中声明插件会提示无法找到 plugin 比较奇怪。