Groovy (二) groovy 加固插件

作者: zcwfeng | 来源:发表于2020-12-08 12:52 被阅读0次

    使用类似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

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

    相关文章

      网友评论

        本文标题:Groovy (二) groovy 加固插件

        本文链接:https://www.haomeiwen.com/subject/otptgktx.html