美文网首页
Gradle 自定义插件

Gradle 自定义插件

作者: Chauncey_Chen | 来源:发表于2018-07-11 15:52 被阅读125次

    Gradle 自定义插件

    官方原文

    gradle学习官方翻译网站

    1.新建项目

    配置build.gradle

    //使用官方的 `groovy` 插件
    apply plugin: 'groovy'
    
    //添加api依赖
    dependencies {dependencyHandler ->
        dependencyHandler .compile gradleApi()
       dependencyHandler. compile localGroovy()
    }
    //添加当前使用的gradle版本为2.1.3
    dependencies { DependencyHandler dependencyHandler ->
        dependencyHandler.compile 'com.android.tools.build:gradle:2.1.3'
        //dependencyHandler.compile fileTree()
    }
    
    
    
    
    

    创建资源

    注意,红框内的两者名保持一致!


    image.png

    2.新建pluginLaunch类

     class MyPluginLaunch implements Plugin<Project> {
    
        /**
         * 因为是遍历 List 顺序添加的,所以可以在 Plugin 中通过先后顺序一一添加
         registerTransform 方法第二个参数是 dependsOn, 可以手动设置依赖关系
         * @param project
         */
    
        @Override
        public void apply(Project project) {
    
                  ZDMLogger.i('Project enable MyPluginLaunch plugin')
    
            project.extensions.create("ccjReleaseInfo",ReleaseInfoExtension)        //创建扩展属性
    
            project.tasks.create("ccjReleaseTask",ReleaseInfoTask) //创建自定义任务
    
        }
    
    }
    
    
    
    

    3.新建自定义属性类Extension

    该属性可以在gradle中直接使用类似于android{},(gradle早期版本需要继承Extension, 新版本不需要继承, 如果报错,选择继承Extension即可).

    class ReleaseInfoExtension  {
    
        String versionName
        String versionCode
        String versionInfo
        String fileName
    
    
        @Override
        public String toString() {
            return "ReleaseInfoExtension{" +
                    "versionName='" + versionName + '\'' +
                    ", versionCode='" + versionCode + '\'' +
                    ", versionInfo='" + versionInfo + '\'' +
                    ", fileName='" + fileName + '\'' +
                    '}'
        }
    }
    
    
    

    4.新建自定义Task

    用来处理自定义属性ReleaseInfoExtension中的变量

    
    class ReleaseInfoTask extends DefaultTask{
    
        ReleaseInfoTask() {
            group='zdmrouter'
            description='the realeaseInfo Task of zdm router'
            mustRunAfter()
        }
    
        /**
         * 在doFitst 和doLast中间执行
         */
        @TaskAction
        void doAction (){
    
            updateInfo()
        }
    
    
    
    
        private void updateInfo(){
    
            String versionCodeMsg=project.extensions.getByName("ccjReleaseInfo").versionCode //其中ccjReleaseInfo为在launcher中定义的变量
    
            ZDMLogger.i( "ReleaseInfoTask.updateInfo.versionCodeMsg>>>>"+versionCodeMsg)
    
    
    
        }
    
    }
    
    

    5.将plugin 发布到jcenter 或者自己搭建的服务器仓库地址.然后进行依赖

    //在root项目中的dependencies中
            classpath 'com.smzdm:zdm_router_register:1.1.0'
    
    
    
    //然后,在使用的地方,;类似于依赖Android插件一样.依赖自己的插件
    apply plugin: 'com.smzdm.android.router.register'
    
    
    
    

    6.依赖完成后,可以在apply自定义插件的gradle中进行

    配置自定义属性

    ccjReleaseInfo {
    
        versionName = "1.0"
        versionCode = 1
        versionInfo = "versionInfo>>ccjReleaseInfo"
    }
    
    

    运行自定义Task

    gradle ccjReleaseTask

    或者在gradle面板中直接调用

    image.png

    相关文章

      网友评论

          本文标题:Gradle 自定义插件

          本文链接:https://www.haomeiwen.com/subject/mcbhpftx.html