移动 前端 Python Android JavagroovyAndroid 软件架构与软件架构

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

  1. 编写groovy bean ,配置参数用
package top.zcwfeng.plugin

class Jiagu {
    String username
    String password
    String jiaguTools
....... set and getter 和java一样 省略
}
  1. 编写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")
        }
    }

}
  1. 核心实现
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
                    }
            }
        }
    }
}
  1. 配置对外暴露声明
    resources/META-INF/xxxx.properties
    内容: implementation-class=top.zcwfeng.plugin.JiaguPlugin。如图
plugin.png
  1. 上传
    可以上传,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
  1. 使用,和我们正常使用插件一样
    在Application gradle 中配置如上图
    需要配置我们自定义参数,用户名密码等
    指定我们的release签名
use.png

比较简单作为独立项目的开发使用工具

上一篇下一篇

猜你喜欢

热点阅读