手写Gradle Plugin(自定义Gradle插件)
插件编译Gradle环境配置
Android Studio 3.6.3
com.android.tools.build:gradle:3.5.3
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
新建一个moudel
src/main下的所有文件和目录,只保留如图所示文件
修改build.gradle
build.gradle文件中的内容全部删除,并修改如下
apply plugin: 'groovy'
apply plugin: 'maven'
repositories {
jcenter()
mavenCentral()
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//依赖 gradle Api仓库
implementation gradleApi()
// 依赖 groovy本地仓库
implementation localGroovy()
implementation 'com.android.tools.build:gradle:3.5.3'
}
//以下配置信息可以根据情况修改
// maven仓库group名称
group = 'com.asm.fix'
// maven仓库插件版本号
version = '1.0.0'
//maven 仓库发布
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri("../asm_fix"))
}
}
}
asm_fix目录下。
创建groovy目录
src/main目录下新建一个groovy目录。在groovy目录下新建包名:com.asm.fix(包名任取,跟开发java时一样)。然后在包下新建BytecodePlugin.groovy文件,文件内容如下:
由于groovy是基于JVM的DSL语言,在groovy中能完美调用Java API。
package com.asm.fix
import org.gradle.api.Plugin
import org.gradle.api.Project
//因为要创建Gradle插件就必须要实现Gradle包中的org.gradle.api.Plugin接口
public class BytecodePlugin implements Plugin<Project> {
void apply(Project project) {
System.out.println("Hello Gradle Plugin")
}
}
创建META-INF目录
插件定义好之后我们要告诉Gradle哪一个类是我们定义的插件类。所以我们需要在moudle的src/main目录下新建一个resources目录,然后在resources目录下新建一个META-INF目录,接着在META-INF目录下新建一个gradle-plugins目录,gradle-plugins目录是自定义Gradle插件的必备目录。最后在gradle-plugins目录下创建一个properties文件。文件名为com.asm.fix.properties,并在文件中添加一下配置内容:
implementation-class=com.asm.fix.BytecodePlugin
最终该module内容为:
使用插件
build.gradle文件中我们已经配置好了插件的Maven发布配置。这时我们运行asmplugin下的uploadArchives Task
Task运行成功后,就会在asmplugin module的同级目录下生成一个asm_fix文件夹,该文件夹就是我们自定义插件的仓库。
插件打包到本地仓库后就可以在主项目的build.gradle中使用我们自定义的插件了,在根目录的build.gradle文件中添加Maven的本地依赖,代码如下所示:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
//maven 仓库地址
maven {
url uri('./asm_fix')
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
// in the individual module build.gradle files
classpath 'com.asm.fix:asmplugin:1.0.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
在根目录的build.gradle配置完成之后,就可以只用我们自定义的插件了,在主项目的的build.gradle文件中添加如下依赖:
apply plugin: 'com.asm.fix'
配置成功后我们重新clean下代码,运行项目我们会在Studio的Build窗口中看到插件所打印的信息,表明插件成功生效。
至此我们手写Gradle Plugin插件就算大功告成了。