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 分钟前
黑马点评-优惠券秒杀-03_basic_seckill_and_oversell
java·数据库·spring boot·spring·缓存·oracle·面试
兰令水1 分钟前
leecodecode【双指针题2】【2026.5.26打卡-java版本】
java·开发语言·算法
ch.ju3 分钟前
Java程序设计(第3版)第四章——引用
java·开发语言
霸道流氓气质4 分钟前
在Qoder中指定JDK和Maven运行AI学习的SpringBoot项目的完整指南
java·人工智能·maven
老码观察6 分钟前
设计模式实战解读(七):适配器模式——让不兼容的接口无缝协作
java·设计模式·适配器模式
garmin Chen6 分钟前
rabbitmq(1):核心机制与 SpringAMQP 详解
java·rabbitmq·java-rabbitmq
Mr_sst10 分钟前
AI 大模型应用开发实习|如何找岗 + 面试真题 + 面经总结
java·人工智能·ai·面试·职场和发展
ImTryCatchException12 分钟前
Android 卡顿诊断实战:从“感觉卡“到“精准定位“的方法论
android
vensli12 分钟前
Wolverine:杀不死的 Android 进程保活方案
android
weelinking14 分钟前
【产品】10_搭建前端框架——把你的原型变成真实页面
java·大数据·前端·数据库·人工智能·python·前端框架