我不太会 groovy 所以使用java 来制作 插件
1;插件一个java library
2:在java library 中的 添加 gradle 依赖 和 安卓插件的依赖
dependencies{
implementation gradleApi();
implementation'com.android.tools.build:gradle:4.0.1'
}
4:创建一个实体类 来定义我们在插件 需要 数据
====================================
public class xxxEntity {
public Stringname;
public Stringpwd;
}
=========================
5:创建一个task (最自己的业务)
========================
public class xxxTask extends DefaultTask{
xxxEntity entity;
@Inject(构造函数 一定要加)
public PGYUploadTask(xxxEntity info) {
this.entity= info;
setGroup("taskGroupName"); // 设置task 的 组名
}
@TaskAction
public void dowrk() {
// 做自己的业务
例如: 上传apk 正常写java的 网络请求就行
}
}
========================
5:插件一个 java 类 实现 implements Plugin<Project> 并实现 apply 方法
========================================
public class DingDingPluginimplements Plugin {
@Override
public void apply(Project project) {
// "taskName", 1: 是在 需要使用 插件的 build.gradle 中需要使用的 配置的名称
// xxxEntity
xxxEntity xxEntity= project.getExtensions().create("xxxConfig", xxxEntity .class);
project.afterEvaluate(new Action() { // 在项目配置完 后执行一个动作
@Override
public void execute(final Project project) {
//Project 可以获取项目的信息
创建task 并执行
// xxxTask" “” task 的名称 xxxTask .class: 要执行的 task xxEntity: xxxTask 构造函数的参数
... 可以传递多个参数
xxxTask sendTxt = project.getTasks().create("xxxTask", xxxTask .class,xxEntity,....);
// 如果是需要多个 task 执行不同的任务 创建taks的 历程和上面一样
// 如果 多个 task 有关联 比如 A task 之执行完 在执行 B 可以使用 task 的 dependsOn();
bTask.dependsOn(A task); // dependsOn表示在自己之前先执行这个方法
====================== 如你想在 app build 完 在执行task
AppExtension appExtension = project.getExtensions().getByType(AppExtension.class);
// 得到一个集合 默认获取 debug 和release
appExtension.getApplicationVariants().all(new Action<ApplicationVariant>() {
@Override
public void execute(ApplicationVariant applicationVariant) {
// 获取apk build 完 之后的信息
applicationVariant.getOutputs().all(new Action<BaseVariantOutput>() { /
@Override
public void execute(BaseVariantOutput baseVariantOutput) {
// 需要加固的 文件
File outputFile = baseVariantOutput.getOutputFile();
String name = baseVariantOutput.getName();
.// 执行 task
xxxTask sendTxt = project.getTasks().create("xxxTask", xxxTask .class,xxEntity,..outputFile .);
}
});
}
});
======================
}
========================================
6:配置 插件
在xx.properties 文件中配置 插件类的 全类型名
implementation-class=com.xxx.xxx.xxPlugin
7 上传插件
在 library 中的 添加 build.gradle 编写
111111=========上传本的仓库
applyplugin:'maven-publish'
publishing{
// Publication
publications{
xxPlugin(MavenPublication){
fromcomponents.java
groupId"com.xxx" // 组织名
artifactId"xxx" // 项目的唯一的标识符, 一般是项目名
version"1.0.0"
}
}
}
此时同步 一下 gradel
======================= 需要 指定仓库 地址可以添加
repositories{
maven{
//指定要上传的maven私服仓库1
url="../repo"
/* url = "http://jenkins.maxrocky.com:8080/maven/content/repositories/thirdparty/"
//认证用户和密码credentials {
username 'admin'
password 'maxrocky5721'
}*/
}
}
然后 同步 上传
=============================