新建一个Groovy Module
AndroidStudio 没有找到直接创建 Groovy Module 的方法, 所以先创建一个Java or Kotlin Library
- File --> New --> New Module --> Java or Kotlin Library
如上图, 创建了一个 com.demo.javaassist 的 Java or Kotlin Library 模块, 创建完成之后修改这个模块的build.gradle文件, 使其变成一个 Groovy Module 模块
plugins {
id 'groovy'
id 'maven-publish'
}
dependencies {
implementation gradleApi()
implementation localGroovy()
implementation 'com.android.tools.build:gradle:7.2.0'
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
创建 groovy和resources/META-INF/gradle-plugins/package.properties 文件
如上图, 手动创建groovy目录和resources目录
创建Plugin插件入口文件
package com.demo.javaassist;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class ModifyPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
System.out.println("ModifyPlugin apply 666666666666666666666");
}
}
创建package.properties文件
implementation-class=模块包名.Plugin插件文件名字
implementation-class=com.demo.javaassist.ModifyPlugin
发布 Plugin 到本地 maven 仓库
在上面创建的 javaassist 模块的 build.gradle文件里面使用 publishing
发布
plugins {
id 'groovy'
id 'maven-publish'
}
dependencies {
implementation gradleApi()
implementation localGroovy()
implementation 'com.android.tools.build:gradle:7.2.0'
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
//发布 Plugin 到本地 maven 仓库
publishing {
publications {
maven(MavenPublication) {
groupId = 'com.demo.javaassist'
artifactId = 'modify'
version = '1.0.0'
from components.java
}
}
repositories {
maven {
url = "../repo"
}
}
}
然后在 AndroidStudio 的 Terminal 运行 gradle 命令 ./gradlew publish
执行成功后, 会在项目里面自动生成一个repo文件目录, 里面包含Plugin插件的jar文件
在项目的其他模块引用这个 Plugin
在项目的 settings.gradle 文件里面新增内容, pluginManagement{} 必须放在最上面, 否则会报错
pluginManagement {
repositories {
maven { url('./repo') }
gradlePluginPortal()
google()
mavenCentral()
}
}
rootProject.name = "AgeApp"
include ':app'
include ':javaassist'
在项目最外层的 build.gradle 文件引用插件
新增本地仓库 maven { url('./repo') }
新增 classpath 'com.demo.javaassist:modify:1.0.0'
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
google()
mavenCentral()
maven { url('./repo') }
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.0'
classpath 'com.demo.javaassist:modify:1.0.0'
}
}
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/public' }
google()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url('./repo') }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在需要使用的模块, 如app的 build.gradle 文件使用插件
apply plugin: 'com.demo.javaassist'
引用成功, 即可看见自定义Plugin中的打印信息.