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 任务
相关推荐
Riu_Peter2 小时前
【技术】Maven 配置 settings.xml 轮询下载
xml·java·maven
冬奇Lab2 小时前
AudioFlinger混音机制深度解析
android·音视频开发·源码阅读
十六年开源服务商2 小时前
2026年WordPress网站地图完整指南
java·前端·javascript
Edward111111113 小时前
3月17枚举
java·开发语言
凡。。。2963 小时前
阿里云产品说明
java
蓝天守卫者联盟13 小时前
2026乙酸乙酯回收设备厂家选型与技术实践
java·jvm·python·算法
于先生吖3 小时前
教育数字化转型 JAVA 国际版答题练习系统完整开发教程
java·开发语言
lakernote3 小时前
EasyPostman 重大更新:正式支持插件模式,当前已上线 5 个官方插件
java·测试工具·开源·postman