Gradle自定义插件基础(一)

1 首先建立一个android library工程

2 然后修改build文件,修改如下,

apply plugin:'groovy'
apply plugin :'maven'


dependencies {
    implementation gradleApi()
    implementation localGroovy()

}
uploadArchives{


    repositories {
        mavenDeployer{
            //当前插件打包的路径
            repository(url:"file:///User/lu/lib/")
        }
    }
}
// 外部引用的时候对应的 classpath 'com.lu.glugin:mylibrary:1.0.0'
group = 'com.lu.glugin'
version = '1.0.0'

3 编码

在main目录下,创建一个groovy目录,然后在该目录下创建task,我们知道gradle都基于task的。创建一个类DemoTask继承DefaultTask后,并且更改后缀名为groovy,内部属性group表示在哪个任务组下面,如果没有设置,则在other下。

 class DemoTask extends DefaultTask {
    // 任务名
    static final String NAME = "demoTask"
     DemoTask(){
      group = "demo"
    }

    @TaskAction
    def start(){

      println 'task is run...............'
    }

}

DemoPlugin继承Plugin,gradle会调用apply方法

class DemoPlugin implements Plugin {

    @Override
     void apply(Project project) {
        println "DemoPlugin apply"
       project.tasks.create(DemoTask.NAME,DemoTask)
    }
}

4 创建META-INF

在main文件目录下创建resources目录,然后创建META-INF目录,在目录下创建gradle-plugins目录,在目录下创建com.mylibrary.properties文

文件里面添加如下属性,表示gradle要调用我哪个类

implementation-class=com.lu.gradle.DemoPlugin

目录结构如图

1.png

5 打包 。所有准备好了后,开始打包。打包也很简单

点击gradle里面的uploadArchives

2.png

看到如图编译成功。则表示打包成功

3.png

在对应的目录,就可以看到打包的结果

4.png

6引用

在工程build文件里面添加,因为我们没有上传到jcenter,在本地,所以引用也引用本地的。如果上传到jcenter审核通过了则就不需要本地引用

buildscript {
    repositories {
        google()
        jcenter()
        maven{
            url uri('c:/User/lu/lib/')
        }
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
        classpath 'com.lu.glugin:mylibrary:1.0.0'
      
    }
}

在app的build文件里面添加依赖

//后面就是前面那个com.mylibrary.properties的文件名
apply plugin:'com.mylibrary'

7 在gradle窗口就可以看到我们插件里面的task了

5.png

8 执行,点击task就可以执行我们的代码

6.png

你可能感兴趣的:(Gradle自定义插件基础(一))