自定义Gradle插件

一个简单的demo的目录结构

自定义Gradle插件 1. 新建一个Android Library 的工程,删掉除src和build.gradle外的文件

2. src/main下新建groovy目录,然后可以在其下创建Java类似的packageName和class

3. 创建插件类 implement Plugin<Project>, 实现apply方法

4. src/main创建resources/META-INF/gralde-plugin目录,创建文件 name.properties, 这儿的name即为apply plugin的id,在文件中声明插件类

    implementation-class=XXX(3中定义的class,包含packageName)
5. 修改build.gradle文件,并将插件上传到本地库中
apply plugin: 'groovy'//导入java插件用于,编译打包我们的插件
apply plugin:'maven'//maven插件,用于上传插件到仓库

//uploadArchives 类型是upload,这个task不是'maven'创建的
//而是'maven'定义了一个rule,而后由我们自己创建的,关于rule,请看后面内容
uploadArchives{
    //本地仓库的一种
    repositories{
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}
group = "com.lling.gradle.plugin"//project属性
version = "1.0"//project属性
dependencies {
    //导入Gradle的api,要写插件,肯定要使用Gradle的api
    compile gradleApi()
    compile localGroovy()
}
6. AS右侧执行uploadArchives Task
自定义Gradle插件
7. 按上面步骤中build.gradle的写法,执行6后,我们会在本地生成一个repo目录
8. 在build.gradle中添加本地仓库地址,且在dependencies中配置classpath
buildscript {
    repositories {
        jcenter()
        maven {
            url uri('./repo')
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath'com.lling.gradle.plugin:plugindemo:1.0'
       // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
9. 在需要使用该插件工程的build.gradle中使用 apply plugin:”name”。
apply plugin:”XXX"
自定义Gradle插件
com.lling.gradlestudy.properties文件中
implementation-class=com.lling.gradle.plugindemo.HelloPlugin

META-INF/gradle-plugins下面的文件的名字并不是随意的,其文件名去掉.properties就是 引用该插件时的id, 如上图中,我们想使用HelloPlugin插件时,在build.gralde这样引用
apply plugin‘com.lling.gradlestudy’  //id即为文件名去掉.properties