Android Gradle - Gradle 自定义插件(Build Script 自定义插件、buildSrc 自定义插件、独立项目自定义插件)

一、Build Script 自定义插件

1、基本介绍
  1. 插件代码直接写在模块级 build.gradle 文件中

  2. 逻辑非常简单,且仅在该模块使用

2、演示
(1)具体实现
  • 在模块级 build.gradle 文件中定义插件
groovy 复制代码
class SimpleBuildScriptPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println "这是 SimpleBuildScriptPlugin"

        // 创建任务
        target.tasks.create("printMessage") {
            doLast {
                println "这是 SimpleBuildScriptPlugin 中的任务 printMessage"
            }
        }
        target.tasks.create("printHello") {
            doLast {
                println "这是 SimpleBuildScriptPlugin 中的任务 printHello"
            }
        }
    }
}
(2)使用插件
  • 在模块级 build.gradle 文件中使用插件
groovy 复制代码
apply plugin: SimpleBuildScriptPlugin
(3)测试
  1. 构建项目时,输出结果如下

    输出结果

    Configure project :gradleplugin
    这是 SimpleBuildScriptPlugin

  2. 在项目根目录下如下指令

shell 复制代码
.\gradlew printMessage
复制代码
# 输出结果

> Configure project :gradleplugin
这是 SimpleBuildScriptPlugin

> Task :gradleplugin:printMessage
这是 SimpleBuildScriptPlugin 中的任务 printMessage

二、buildSrc 自定义插件

1、基本介绍
  1. 在项目根目录下创建 buildSrc 模块,代码会自动编译并供所有模块使用

  2. 逻辑较复杂,但在单一工程内部多个模块复用

2、演示
(1)具体实现
  1. 创建 buildSrc 模块

  2. settings.gradle 文件中删除如下内容

groovy 复制代码
include ':buildSrc'
  1. buildSrc/src/main 目录下创建 groovy 目录

  2. buildSrc/src/main/groovy 目录下创建并编辑 com.my.buildsrc.SimpleBuildSrcPlugin.groovy

groovy 复制代码
package com.my.buildsrc

import org.gradle.api.Plugin
import org.gradle.api.Project

class SimpleBuildSrcPlugin implements Plugin<Project> {

    @Override
    void apply(Project target) {
        println "这是 SimpleBuildSrcPlugin"

        // 添加扩展
        target.extensions.create("buildSrcConfig", BuildSrcExtension)

        // 创建任务
        target.tasks.create("buildSrcTask") {
            doLast {
                def config = target.buildSrcConfig
                println "Message: ${config.message ?: 'default message'}"
            }
        }
    }
}

class BuildSrcExtension {
    String message
}
  1. buildSrc/src/main 目录下创建 resources 目录,在 buildSrc/src/main/resources 目录下创建 META-INF/gradle-plugins 目录

  2. buildSrc/src/main/resources/META-INF/gradle-plugins 目录下创建并编辑 com.my.buildsrc.properties

properties 复制代码
implementation-class=com.my.buildsrc.SimpleBuildSrcPlugin
(2)使用插件
  • 在其他模块的模块级 build.gradle 文件中使用插件
groovy 复制代码
apply plugin: 'com.my.buildsrc'

buildSrcConfig {
    message = "Hello World"
}
(3)测试
  1. 构建项目时,输出结果如下

    输出结果

    Configure project :gradleplugin
    这是 SimpleBuildSrcPlugin

  2. 在项目根目录下如下指令

shell 复制代码
.\gradlew buildSrcTask
复制代码
# 输出结果

> Configure project :gradleplugin
这是 SimpleBuildSrcPlugin

> Task :gradleplugin:buildSrcTask
Message: Hello World

三、独立项目自定义插件

1、基本介绍
  1. 创建一个完全独立的 Java/Kotlin Library 模块,打包成 JAR 上传至本地或远程仓库

  2. 可以在多个不同工程之间复用,或准备开源

2、演示
(1)具体实现
  1. 创建一个名为 MyPluginProject 的项目

  2. 在项目中,删除 app 模块,创建一个名为 PluginModule 的模块

  3. PluginModule/src/main/java 目录下创建并编辑 com.my.pluginmodule.SimplePlugin.java

java 复制代码
public class SimplePlugin implements Plugin<Project> {

    @Override
    public void apply(Project target) {
        System.out.println("这是 SimplePlugin");

        // 创建任务
        Task task = target.getTasks().create("simpleTask");
        task.doLast(t -> {
            System.out.println("这是 simpleTask 任务");
        });
    }
}
  1. PluginModule/src/main/resources/META-INF/gradle-plugins 目录下创建并编辑 com.my.pluginmodule.properties
properties 复制代码
implementation-class=com.my.pluginmodule.SimplePlugin
  1. 修改 PluginModule 的 build.gradle 文件
groovy 复制代码
plugins {
    id 'java-library'
    id 'maven-publish'
}

dependencies {
    implementation gradleApi()
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

// 发布配置
publishing {
    publications {
        plugin(MavenPublication) {
            from components.java
            groupId = 'com.my'
            artifactId = 'pluginmodule'
            version = '1.0.0'
        }
    }
    repositories {
        mavenLocal()
    }
}
  1. 在项目根目录下如下指令,发布插件
shell 复制代码
./gradlew :pluginmodule:publishToMavenLocal
(2)使用插件
  1. 在项目级 build.gradle 文件中,添加如下内容
groovy 复制代码
buildscript {
    repositories {
        mavenLocal()
    }
    dependencies {
        classpath 'com.my:pluginmodule:1.0.0'
    }
}
  1. 在模块级 build.gradle 文件中,添加如下内容
groovy 复制代码
apply plugin: 'com.my.pluginmodule'
(3)测试
  1. 构建项目时,输出结果如下

    输出结果

    Configure project :gradleplugin
    这是 SimplePlugin

  2. 在项目根目录下如下指令

shell 复制代码
.\gradlew simpleTask
复制代码
# 输出结果

> Configure project :gradleplugin
这是 SimplePlugin

> Task :gradleplugin:simpleTask
这是 simpleTask 任务
相关推荐
代码羊羊1 天前
Rust 迭代器完全通俗易懂指南(零基础全覆盖)
java·开发语言·rust
雨白1 天前
深入理解 Kotlin 协程 (六):进退有度,解密协程取消响应与异常分发机制
kotlin
MY_TEUCK1 天前
【Java 后端】SpringBoot 登录认证与会话跟踪实战(JWT + Filter/Interceptor)
java·开发语言·spring boot
今天长肉了吗1 天前
银行风控项目踩坑实录:指标跑了6小时,风险评分全挂了
java
随读手机1 天前
多式联运信息交互平台完整方案(2026版)
java·ai·eclipse·云计算·区块链
许彰午1 天前
03-二叉树——从递归遍历到非递归实现
java·算法
nj01281 天前
Spring 循环依赖详解:三级缓存、早期引用、AOP 代理与懒加载
java·spring·缓存
野生技术架构师1 天前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
百锦再1 天前
Auto.js变成基础知识学习
开发语言·javascript·学习·sqlite·kotlin·android studio·数据库开发
一只叫煤球的猫1 天前
ThreadForge 源码解读一:ThreadScope 如何把并发任务放进清晰边界?
java·面试·开源