1.概况
gradle plugin有很多种写法,这里只介绍最常用的使用方法
步骤:
1,独立项目编译plugin至maven仓库
2,用户通过 apply plugin的方式使用plugin
环境:
gradle版本使用的是4.0.0
2.介绍
步骤:
1,创建一个空项目,创建一个空mudule(作为我们的plugin项目)
2,删除无用的mudule内容,目录结构为:
└── build.gradle
│
└── src
└── main
├── groovy
│ └── 包名+plugin内容
└── resources
└── META-INF
└── gradle-plugins
└── 你plugin名字.properties
TIPS:下面假设plugin名字为doubleTap
doubleTap.properties
内容为:
implementation-class=com.zhumingwei.doubletap.DoubleTapPlugin
只有一行内容,后面跟着pluginClass的全路径类名
3,创建pluginClass
在你的groovy包下创建你的pluginClass,java和grovvy都可以。(网上很多说只能创建groovy文件,但是笔主实测发现java类也可以用的)
内容为
import org.gradle.api.Plugin;
import org.gradle.api.Project;
public class DoubleTapPlugin implements Plugin<Project> {
private static final String EXT_NAME = "doubleTab";
@Override
public void apply(Project project) {
System.out.println("hello plugin");
}
}
4,打包至本地maven
在plugin module中的bulid.gradle中,使用 maven 模块
apply plugin: 'maven'
def sonatypeRepositoryUrl = "file://" + rootDir.absolutePath + "/.repo" // 文件路径自己随便定
artifacts {
archives sourcesJar
}
afterEvaluate { project ->
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = nexus_groupId
pom.artifactId = nexus_artifactId
pom.packaging = 'aar'
pom.name = nexus_fileName
pom.version = nexus_versionName + '-SNAPSHOT'
repository(url: sonatypeRepositoryUrl) {
try {
authentication(userName: properties.getProperty("userName"), password: properties.getProperty("password"))
} catch (Exception e) {
println(e.getMessage())
}
}
}
}
}
}
nexus_versionName=0.1.5
nexus_artifactId=double_tap_plugin
nexus_groupId=com.zhumingwei.doubleTap
nexus_fileName=double_tap_plugin
详细maven配置可以查看文档 :https://docs.gradle.org/current/userguide/maven_plugin.html
上面的配置代码添加后,gradle 会出现 uploadArcheives的Task
image.png
运行它会发现我在根目录出现了一个.repo文件夹,目录就是前面代码配置的sonatypeRepositoryUrl路径
5.应用
在主工程build.gradle中
添加maven仓库
repositories {
maven {
url "file://${rootDir.absolutePath}/.repo"
}
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.0"
classpath 'com.zhumingwei.doubleTap:double_tap_plugin:0.1.5-SNAPSHOT' //这里对应上面发布maven的时候配置的参数
}
在 app/build.gradle添加
apply plugin: 'doubleTap'
接下载build一下工程就会发现,log 出现 “hello plugin” 说明plugin创建成功
调试
参考:https://juejin.im/post/5dc8d947e51d455523170b7f
TIPS:
1,如果transform无法调试,执行一遍clean就可以调试了
2,命令行使用:./gradlew <任务名> -Dorg.gradle.daemon=false -Dorg.gradle.debug=true
注册transform
在apply方法中添加代码
boolean isApp = project.getPlugins().hasPlugin(AppPlugin.class);
if (!isApp) {
throw new GradleException(" this plugin is not application");
}
AppExtension appExtension = project.getExtensions().getByType(AppExtension.class);
appExtension.registerTransform(new 我的Transform());
注册transform
网友评论