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自動注冊與反注冊