1:在android studio 中项目下创建一个 java library
2:在library 的 build.grade 中 引用 gradle
implementation gradleApi();
3:创建一个插件 java 类 实现Plugin 接口
4 注册 插件
在library 的 src目录在 创建resources 文件夹
resources 创建META-INF 文件夹
在META-INF 创建 gradle-plugins文件夹
在gradle-plugins 创建xxx..propertos (com.lww.jiaguplugin.properties)
在 xxx..propertos 中写上 # 插件全限定类名
implementation-class=com.lww.plugin.MyjiaguClass
5将我们的插件 发布到 本地仓库
5.1:在 library 的 build.gradle 添加
===============================
applyplugin:'maven-publish'
publishing{
// Publication
publications{
JiaguPlugin(MavenPublication){
fromcomponents.java
// ActivationGroupID
groupId"com.lww"
artifactId"jiagu"
version"1.0"
}
}
}
===============================
如果想上传到 项目的更目录下可以这样
repositories{
maven{
//指定要上传的maven私服仓库
url="../repo"
/* url = "http://jenkins.maxrocky.com:8080/maven/content/repositories/thirdparty/"
//认证用户和密码credentials {
username 'admin'
password 'maxrocky5721'
}*/
}
}
二选一
==============
5..2 点击 gradle 右上角 sync now
5.3: studio 右侧的gradle 的工具栏 点击 图中 按钮 上传
5.4; 上传成功后 显示
6 使用插件”
在项目级别的 build.gradle 中
6.1使用本地仓库 mavenLocal()
6.2 :引入我们的插件 classpath"com.lww:jiagu:1.0"
6.3 在app的 build.gradle 中 引用插件 applyplugin:'com.lww.jiaguplugin'
案例 360加固 插件
0: 在library 中 build.gradle 引用 安卓 插件
implementation"com.android.tools.build:gradle:4.0.1"
1:创建一个实体类
public class JiaGuExt {
// 360 账号密码
private Stringusername;
private Stringuserpwd;
// 签领 路径
private StringkeyStorePath;
// 签领 密码
private StringkeyStorePwd;
// 签领 别名
private StringkeyStoreAlias;
// 别名密码
private StringkeyStoreAliasPwd;
// 加固工具 路径
private StringjiaguToolsPath;
提供 get/set 方法
}
2: 创建一个插件类
public class MyjiaguClassimplements Plugin {
@Override
public void apply(Project project) {
final JiaGuExt jiagu = project.getExtensions().create("Myjiagu", JiaGuExt.class);
project.afterEvaluate(new Action() {
@Override
public void execute(final Project project) {
System.out.println(jiagu.getUsername());
AppExtension appExtension = project.getExtensions().getByType(AppExtension.class);
// 得到一个集合 默认获取 debug 和release
appExtension.getApplicationVariants().all(new Action() {
@Override
public void execute(ApplicationVariant applicationVariant) {
applicationVariant.getOutputs().all(new Action() {
@Override
public void execute(BaseVariantOutput baseVariantOutput) {
// 需要加固的 文件
File outputFile = baseVariantOutput.getOutputFile();
String name = baseVariantOutput.getName();
project.getTasks().create("jiagu" + name, JaikuTask.class,
outputFile,jiagu);
}
});
}
});
}
});
}
3:创建一个r任务 task
public class JaikuTaskextends DefaultTask {
Filefile;
JiaGuExtjiaGuExt;
@Inject
public JaikuTask(File apk,JiaGuExt jiaGuExt) {
setGroup("task");
this.file=apk;
this.jiaGuExt=jiaGuExt;
}
// 表示 我们点击gradle 中的 jiagutask 时 就会 执行
@TaskAction
public void jiagu(){
System.out.println(" a aaaaaaaa ");
// 完成加固
getProject().exec(new Action() {
@Override
public void execute(ExecSpec execSpec) {
// 登录360
execSpec.commandLine("java","-version",
jiaGuExt.getJiaguToolsPath(),"-login",jiaGuExt.getUsername(),
jiaGuExt.getUserpwd());
}
});
// 导入签名
getProject().exec(new Action() {
@Override
public void execute(ExecSpec execSpec) {
execSpec.commandLine("java","-jar",
jiaGuExt.getJiaguToolsPath(),"-importsign",
jiaGuExt.getKeyStorePath(),
jiaGuExt.getKeyStorePwd(),
jiaGuExt.getKeyStoreAlias(),
jiaGuExt.getKeyStoreAliasPwd() );
}
});
// 加固
getProject().exec(new Action() {
@Override
public void execute(ExecSpec execSpec) {
execSpec.commandLine("java","-jar",
jiaGuExt.getJiaguToolsPath(),"-jiagu",
file.getAbsoluteFile(),
file.getParent(),
jiaGuExt.getKeyStoreAlias(),
"-autosign");
}
});
}
}
4:在app的 build.gradle 中 添加 360 加固信息 和 app 签名信息
Myjiagu{ //
Myjiagu 是你在 插件类中 定义的
username'360 加固账号'
userpwd'360 加固账号 加固密码'
keyStorePath file('../demo.jks').absolutePath
keyStorePwd'123456'
keyStoreAlias'demo'
keyStoreAliasPwd'123456'
jiaguToolsPath'D:\\soft\\360\\jiagu\\jiagu\\jiagu.jar' // 360 加固 jar 包路径
}
5 再次将插件 上传到本地仓库 (做了修改 就上传)