• 自定义Gradle插件


    个人博客

    http://www.milovetingting.cn

    自定义Gradle插件

    自定义Gradle插件可以分三种

    1. 定义在具体的Module对应的gradle文件里。这种方式定义的插件只能在定义的Module中使用

    2. 定义名为BuildSrc的Module,在BuildSrc里定义。这种方式定义的插件只能在同一个工程中使用。

    3. 定义其它名字的Module,在新定义的Module里定义插件。这种方式定义的插件可以给第三方使用。

    下面针对这三种方式,以开发一个可以让用户自定义配置的插件为例,分别来展开具体的定义插件过程

    定义在Gradle文件里

    定义

    在app模块下的gradle文件中,增加定义

    class CustomInnerConfig {
        String key
    }
    
    //定义extension
    extensions.create("customInnerConfig", CustomInnerConfig.class)
    
    task("CustomInnerTask", group: 'CustomTask').doLast {
        println("CustomInnerTask,key=${customInnerConfig.key}")
    }
    

    同步项目后,可以在Android Studio右侧的gradle面板中看到新增加的插件

    定义在gradle文件

    使用

    自定义配置

    customInnerConfig {
        key = 'inner key'
    }
    

    在gralde面板中,找到CustomInnerTask,双击运行

    输出结果如下,可以看到自定义的配置已经生效:

    Parallel execution with configuration on demand is an incubating feature.
    :app:CustomInnerTask
    CustomInnerTask,key=inner key
    
    BUILD SUCCESSFUL in 0s
    1 actionable task: 1 executed
    10:56:44: Task execution finished 'CustomInnerTask'.
    

    在BuildSrc模块中定义

    定义

    新建名为BuildSrc的模块,删除BuildSrc模块下其它文件,只保留build.gradle。配置build.gradle文件如下:

    apply plugin: 'groovy'
    
    dependencies {
        implementation gradleApi()
        implementation localGroovy()
    }
    

    同步后,新建src/main目录

    在main目录下新建groovy文件夹

    然后在groovy文件夹下新建目录:com/wangyz/local

    在local目录下新建CustomLocalConfig.java文件,内容如下:

    package com.wangyz.local;
    
    public class CustomLocalConfig {
        String key;
    }
    
    

    在local目录下新建LocalPlugin.groovy文件,内容如下:

    package com.wangyz.local
    
    import org.gradle.api.Plugin
    import org.gradle.api.Project
    
    class LocalPlugin implements Plugin<Project> {
        @Override
        void apply(Project project) {
            project.extensions.create("setting", Setting)
    
            project.task('CustomLocalTask', group: 'Custom').doLast {
                println "自定义LocalTask,versionName:${project.setting.versionName}"
            }
        }
    }
    

    使用

    在app模块下的gradle文件中引入刚才定义的插件

    apply plugin: com.wangyz.local.LocalPlugin
    

    同步后,gradle面板如下

    定义在BuildSrc

    自定义配置

    customLocalConfig{
        key = 'local key'
    }
    

    双击CustomLocalTask,执行结果如下

    CustomLocalTask,key=local key
    
    BUILD SUCCESSFUL in 0s
    1 actionable task: 1 executed
    11:20:47: Task execution finished 'CustomLocalTask'.
    

    定义可供第三方使用的插件

    定义

    新建名为Plugins的模块,删除Plugins模块下src/main其它文件。配置build.gradle文件如下:

    apply plugin: 'groovy'
    
    dependencies {
        implementation gradleApi()
        implementation localGroovy()
    }
    

    在main目录下新建groovy文件夹

    然后在groovy文件夹下新建目录:com/wangyz/plugins

    CustomConfig.java文件,内容如下:

    package com.wangyz.plugins;
    
    public class CustomConfig {
    
        String key;
    
    }
    

    在plugins目录下新建CustomPlugin.groovy文件,内容如下:

    package com.wangyz.plugins
    
    import org.gradle.api.Plugin
    import org.gradle.api.Project
    
    class CustomPlugin implements Plugin<Project> {
        @Override
        void apply(Project project){
             project.extensions.create("customConfig", CustomConfig)
    
            project.task('CustomTask', group: 'CustomTask').doLast {
                println "CustomTask,key=${project.customConfig.key}"
            }
        }
    }
    

    在Plugins模块的src/main目录下新建resources/META-INF/gradle-plugins目录,在目录下新建名为com.wangyz.plugins.CustomPlugin.properties的文件,文件名即为第三方引用的插件名称。文件内容为:

    implementation-class=com.wangyz.plugins.CustomPlugin
    

    在这个文件里配置了之前定义的CustomPlugin的路径

    发布插件

    在Plugin模块的build.gradle文件中增加以下配置

    apply plugin: 'maven-publish'
    
    publishing{
        publications{
            mavenJava(MavenPublication){
                groupId 'com.wangyzs.plugin'
                artifactId 'CustomPlugin'
                version '1.0.0'
    
                from components.java
            }
        }
    }
    
    publishing{
        repositories {
            maven{
                url uri('D:\Repository')
            }
        }
    }
    

    同步后,在Terminal面板执行gradle publish命令,然后在D:Repository下可以找到生成的插件

    引入插件

    在工程的build.gradle文件中增加

    repositories {
            //...
            maven{
                url uri('D:\Repository')
            }
        }
        dependencies {
            //...
            classpath 'com.wangyz.plugins:CustomPlugin:1.0.0'
        }
    

    在需要引入的模块的build.gradle中增加

    apply plugin: 'com.wangyz.plugins.CustomPlugin'
    
    customConfig{
        key = 'custom key'
    }
    

    同步后,在gradle面板双击CustomTask运行

    第三方使用的插件

    输出结果:

    CustomTask,key=custom key
    
    BUILD SUCCESSFUL in 0s
    1 actionable task: 1 executed
    13:02:48: Task execution finished 'CustomTask'.
    

    源码地址:https://github.com/milovetingting/Samples/tree/master/GradlePlugin

  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/milovetingting/p/12359710.html
Copyright © 2020-2023  润新知