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 天前
阿姆达尔定律(Amdahl‘s Law)
java·开发语言
知彼解己1 天前
Java 版本演进
java·开发语言·spring boot
风样滴男人哟1 天前
PHP特性之反射类ReflectionClass机制
android·开发语言·php
极客先躯1 天前
高级java每日一道面试题-2026年05月11日-实战篇[Docker]-如何容器化金融产品推荐系统?
java·运维·docker·容器·金融·高级面试·金融产品推荐系统
朱容zr3331331 天前
为什么推荐使用自增主键?使用UUID作为主键的优缺点是什么?
java·运维·数据库·后端·mysql·面试·性能优化
小孔龙1 天前
RenderNode 与 DisplayList:Android 硬件加速的绘制记录与复用
android·性能优化
知彼解己1 天前
Eclipse Temurin:企业级 Java JDK 发行版的最佳实践
java·ide·eclipse
朱容zr3331331 天前
请解释“回表”的概念。
java·前端·数据库
不吃辣4901 天前
vibe coding | 如何做一个 AI 音乐生成工具?
java·人工智能·后端·ai·ai编程
NWU_LK1 天前
【WebFlux】第八篇 —— 自定义调度器
java