Groovy (二) groovy 加固插件
2020-12-08 本文已影响0人
zcwfeng
使用类似360加固
思路,下载360加固,根据命令行help配置自动执行加固打包
插件实现过程
开发方式
Build script脚 本
把插件写在 build.gradle 文件中,一般用于简单的逻辑,只在该 build.gradle 文件 可见。
buildSrc目录
将插件源代码放在 buildSrc/src/main/groovy/ 中,只对该项目中可见。
独立项目
一个独立的 Java 项目/模块,可以将文件包发布到仓库(Jcenter),使其他项目方便引 入。
正如我们开发Android项目,创建Activity需要继承android.app.Activity或其子类,插件需要实现 org.gradle.api.Plugin<Project>接口。
需要新建一个Java Lib项目。kotlin也可以,这里用java
- 编写groovy bean ,配置参数用
package top.zcwfeng.plugin
class Jiagu {
String username
String password
String jiaguTools
....... set and getter 和java一样 省略
}
- 编写Task----》groovy JiaguTask
package top.zcwfeng.plugin
import com.android.builder.model.SigningConfig
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction
class JiaguTask extends DefaultTask {
Jiagu jiagu
SigningConfig signingConfig
File apk
JiaguTask() {
group = "jiagu"
}
@TaskAction
def run() {
// 调用命令行
project.exec {
//java -jar jiagu.jar -login user password
it.commandLine("java", "-jar", jiagu.jiaguTools, "-login", jiagu.username, jiagu.password)
}
if (signingConfig) {
// java -jar jiagu.jar -importsign xxxx
project.exec {
it.commandLine("java", "-jar", jiagu.jiaguTools, "-importsign",
signingConfig.storeFile.absolutePath,
signingConfig.storePassword,
signingConfig.keyAlias,
signingConfig.keyPassword,
)
}
}
// java -jar jiagu.jar -jiagu xxxx
project.exec {
it.commandLine("java", "-jar",
jiagu.jiaguTools,
"-jiagu",
apk.absolutePath,
apk.parent,
"-autosign")
}
}
}
- 核心实现
package top.zcwfeng.plugin
import com.android.build.gradle.AppExtension
import com.android.build.gradle.api.ApplicationVariant
import com.android.build.gradle.api.BaseVariantOutput
import com.android.builder.model.SigningConfig
import org.gradle.api.Plugin
import org.gradle.api.Project
class JiaguPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
Jiagu jiagu = project.extensions.create("jiagu", Jiagu)
//回调,在gradle配置完成后回调,在解析完build.gradle回调
project.afterEvaluate {
// 需要配置好build.gradle 引入 application的插件
AppExtension android = project.extensions.android
android.applicationVariants.all {
ApplicationVariant variant ->
//对应的变体(debug/release)的签名配置
SigningConfig config = variant.signingConfig
variant.outputs.all {
BaseVariantOutput output ->
//输出apk文件
File apk = output.outputFile
// 创建加固任务 jiagu Debug
JiaguTask jiaguTask =
project.tasks.create("jiagu${variant.baseName.capitalize()}", JiaguTask)
jiaguTask.jiagu = jiagu
jiaguTask.signingConfig = config
jiaguTask.apk = apk
}
}
}
}
}
- 配置对外暴露声明
resources/META-INF/xxxx.properties
内容: implementation-class=top.zcwfeng.plugin.JiaguPlugin。如图
- 上传
可以上传,google或者jcenter,这里是测试使用我们可以上传本地maven
配置
plugins {
id 'groovy'
}
dependencies {
// 我们代码需要用到project的相关东西,所以需要Application中的依赖
implementation 'com.android.tools.build:gradle:4.1.0'
implementation gradleApi()
}
java {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
apply plugin:'maven-publish'
publishing{
publications {
Jiagu(MavenPublication){
from components.java
groupId 'top.zcwfeng'
artifactId 'jiagu'
version '1.0'
}
}
}
Application 的gradle 的 配置
添加MavenLocal
repositories {
google()
jcenter()
mavenLocal()
}
点击publishToMavelLocal 上传
upload.png- 使用,和我们正常使用插件一样
在Application gradle 中配置如上图
需要配置我们自定义参数,用户名密码等
指定我们的release签名
比较简单作为独立项目的开发使用工具