Android 自定义 gradle 插件

2018-06-26  本文已影响0人  drumge_git

easy-gradle-plugin

gradle 配置

 buildscript {

    repositories {
        maven{ url uri('https://oss.sonatype.org/content/groups/staging')}
    }
    dependencies {
        // 添加 easy-gradle-plugin 插件, 主要是为了 apply plugin: 'com.drumge.easy.plugin'
        classpath "com.github.drumge:easy-plugin:0.0.2"
    }
 }

 allprojects {
    repositories {
        maven{ url uri('https://oss.sonatype.org/content/groups/staging')}
    }
 }
apply plugin: 'com.drumge.easy.plugin'
easy_plugin {
    enable = true

    plugins{
        // 包含多个插件,每个插件名字可以自定义,只是插件内部可能会关系名字,比如 example
    }
}

以上就是所有使用 easy-gradle-plugin 的全部配置。实现自己的插件之后,并配置以上的两个地方就可以愉快的使用自定义 gradle 插件了。

示例演示说明

  1. 在项目中创建一个 Java Library 类型 module,可参考 plugin-example 和 java-plugin-example。
  2. 在创建 module 下的 build.gradle dependencies 中加入依赖 implementation "com.github.drumge:easy-plugin-api:0.2.2"
  3. 在 build.gradle 最后加入 apply from: "${rootDir.absolutePath}/build_scrip/plugin_build.gradle" 使用 plugin_build.gradle 脚本中自定义的 task, 包含 buildPlugin 和 cleanPlugin,分别编译本地插件和清除插件。
  4. 根据需要创建类,可分别实现 easy-plugin-api 中的接口类,或者继承抽象类并实现需要的接口。
  5. 执行 buildPlugin 生成插件 jar 并默认拷贝到 rootDir/plugin_libs 目录,生成目录可在 plugin_build.gradle 脚本中手动修改。
  6. 在根目录 build.gradle 添加本地插件依赖的 classpath
   buildscript {
       dependencies {
           // 添加本地插件依赖, 其中 plugin_libs 目录可以在 plugin_build.gradle 中手动修改
           classpath fileTree(dir: 'plugin_libs', include: ['*.jar'])
       }
   }
  1. 在 application module 下的 build.gradle 中添加插件配置,以项目中的 example-plugin 和 java-example-plugin 为例
    apply plugin: 'com.drumge.easy.plugin'

    import com.drumge.plugin.example.ExampleExtend
    import com.drumge.plugin.example.ExamplePlugin
    import com.drumge.plugin.example.ExampleTransform
    import com.drumge.plugn.example.java.JavaPlugin
    import com.drumge.plugn.example.java.JavaExtend
    import com.drumge.plugn.example.java.JavaTransform

    easy_plugin {
        enable = true
        plugins{
            example { // 使用 groovy 语言实现的插件,详细请看 plugin-example module
                plugin = new ExamplePlugin(project)
                // 可自定义功能丰富的 extend
                extend = ExampleExtend.createExtend(project) { ExampleExtend extend ->
                    extend.enable = true
                    extend.infos {
                        info1 {
                            infoVersion = '0.0.1'
                        }
                        info2 {
                            infoVersion = '0.0.2'
                        }
                        info3 {
                            infoVersion = '0.0.3'
                        }
                    }
                }
                // 自定义 transform
                transform = new ExampleTransform(project)
            }

            java_example { // 使用 Java 语言实现的插件,详细请看 java-plugin-example module
                plugin = new JavaPlugin(project)
                // 可自定义功能丰富的 extend
                extend = JavaExtend.createExtend(project) { JavaExtend extend ->
                    extend.enable = true
                    extend.infos {
                        java_info1 {
                            infoVersion = '0.0.1'
                        }
                        java_info2 {
                            infoVersion = '0.0.2'
                        }
                        java_info3 {
                            infoVersion = '0.0.3'
                        }
                    }
                }
                transform = new JavaTransform(project)
            }
        }
    }
  1. 创建远程插件是指,本地生成插件之后上传到 maven 远程仓库,并通过 dependencies 依赖远程仓库的方式导入 classpath。
  2. 创建步骤跟本地插件是一样的,不同的地方在于,不是使用 buildPlugin 来生成插件,需要通过发布 maven 仓库相关的步骤。这里就不展开讲,需者可自行搜索,资料还是挺多的。
  3. 发布到 maven 仓库之后,需要在根目录下的 build.gradle buildscript { repositories { }} 中添加 maven 库的地址。接着像其他的插件一样添加 classpath 即可,如 classpath "com.github.drumge:kvo-plugin:0.2.2"
  4. application module 下的 build.gradle 配置同本地插件是一样的
   apply plugin: 'com.drumge.easy.plugin'

   import com.drumge.kvo.plugin.KvoPlugin
   import com.drumge.kvo.plugin.KvoTransform
   easy_plugin {
       enable = true
       plugins{
           kvo { // 使用了 easy-gradle-plugin 的实践项目,详情可跳转 https://github.com/drumge/kvo.git 了解
               plugin = new KvoPlugin(project)
               transform = new KvoTransform(project)
           }
       }
   }

接口说明

easy_plugin {
    plugins {
        exmple { // 名字可自定义
            // 以下的 plugin, extend, transform 名字不能改,并且分别对应着指定的类型, 这些参数的接口类定义在 easy-plugin-api 中。plugin -> IPlugin, extend -> IExtend, transform -> IEasyTransform
            // plugin, extend, ransform 三者并不是必须的,可以只实现其中的任何一个
            plugin = new ExamplePlugin(project) // class ExamplePlugin implements IPlugin
            extend = new ExampleExtend() // class ExampleExtend implements IExtend
            transform = new ExampleTransform(project) // class ExampleTransform extends BaseEasyTransform
        }
    }
}

实战项目

上一篇 下一篇

猜你喜欢

热点阅读