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<Project> {
@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自动注册与反注册