Gradle插件开发入门

1、使用AndroidStudio创建一个普通的java Module

2、修改build.gradle文件,替换成下面的内容

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

dependencies {
    //gradle sdk
    compile gradleApi()
    //groovy sdk
    compile localGroovy()
    compile 'com.android.tools.build:gradle:2.3.0'
    compile 'org.javassist:javassist:3.25.0-GA'
}

/**定义工件的group、name 和 version*/
group = 'com.liwg.eventbus.autoregister'
archivesBaseName = 'eventbus-autoregister'
version = '1.0.0'

uploadArchives{ //当前项目可以发布到本地文件夹中
    repositories {
        mavenDeployer {
            repository(url: uri('../repo')) //定义本地maven仓库的地址
        }
    }
}

3、修改src/main/java的目录名改成src/main/groovy

4、在groovy新建自己的包目录,并新建一个groovy 类,这个类就是插件的入口类

package com.liwg.plugin.autoregister

import org.gradle.api.Plugin
import org.gradle.api.Project

class AutoRegisterPlugin implements Plugin {

    @Override
    void apply(Project project) {
        println("插件执行了")
    }
}

5、新建插件配置文件 /src/main/resources/META-INF/gradle-plugins/com.eventbus.autoregister.properties,文件名就是插件名,引用插件时使用apply plugin: "com.eventbus.autoregister"

//文件内容,类名改成自己的类名
implementation-class=com.liwg.plugin.autoregister.AutoRegisterPlugin

6、执行uploadArchives这个gradle任务会在 项目根目录的repo文件夹生成一个本地maven仓库

7、在项目的gradle文件添加如下配置

buildscript {
    
    repositories {
        // 设置maven为本地仓库
        maven {
            url "./repo"
        }
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        // 引用我们自己定义的插件
        classpath 'com.liwg.eventbus.autoregister:eventbus-autoregister:1.0.0'
    }
}

allprojects {
    repositories {
        // 设置maven为本地仓库
        maven {
            url "./repo"
        }
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

8、在 app目录下的gradle文件做如下引用

apply plugin: 'com.android.application'
// 引用插件,当我们在运行或者构建时就会执行到我们的插件代码
apply plugin: "com.eventbus.autoregister"

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.liwg.eventbus.autoregister"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

文章介绍的只是简单创建一个插件工程,更多核心功能主要是学习通过transform配合javassist操作字节码动态注入代码,这部分内容可以参考我另一偏博客

EventBus自动注册与反注册

你可能感兴趣的:(Gradle插件开发入门)