gradle自定义plugin实践之360多渠道加固打包

项目地址

  • 使用AndroidStudio新建一个工程或者新建一个module,
    在src/main下新建两个文件夹,groovy、resources,

PS:这里的名字其实叫什么都可以,之前的java、res我们可以直接删除。

  • 修改app文件夹下的build.gradle文件
apply plugin: 'groovy'
apply plugin: 'maven'

sourceSets {
    main {
        groovy {
            srcDir 'src/main/groovy'//指定groovy目录
        }
        resources {
            srcDir 'src/main/resources'//指定resources目录
        }
    }
}

dependencies {
    //这里根据插件需要,添加对应的依赖
    implementation gradleApi()
    implementation localGroovy()
}
repositories {
    mavenCentral()
}
  • 在resources/META-INF/gradle-plugins目录中新建com.ysjk.plugin.reinforceApp.properties文件,这个文件名就是使用插件时要apply的名字,我这里是com.ysjk.plugin.reinforceApp,在这个文件中写入以下代码:
implementation-class=com.ysjk.plugin.ReinforceAppPlugin
  • 在groovy目录中新建PublishAppPlugin.groovy文件,实现Plugin接口
class ReinforceAppPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.extensions.create("reinforceAppInfo", ReinforceAppInfoExtension.class)
        project.tasks.create("reinforceApp", ReinforceAppTask.class)
    }
}
  • 定义参数ReinforceAppInfoExtension
    根据我们的需求,我们需要以下参数。
    360加固包的路径
    签名文件的路径、密码信息
    渠道文件的路径
    文件输出路径
class PublishAppInfoExtension {
    String qihuPath //360加固包(jiagu.jar)的文件路径
    String keyStorePath //keyStor文件路径
    String keyStorePass //keyStor密码
    String keyStoreKeyAlias //keyStoreKeyAlias
    String keyStoreKeyAliasPass //keyStoreKeyAlias密码
    String channelPath //渠道文件路径
    String outputPath //文件夹输出路径
}
  • 自定义ReinforceAppTask
    @TaskAction注解是任务执行的方法,会在执行阶段执行,因为我们的任务是依赖于build的,所以当我们的任务执行时,打包已经完成了。
class ReinforceAppTask extends DefaultTask {
    ReinforceAppTask() {
        group = 'ysjk'
        description = 'reinforce app'
        dependsOn("build")
    }

    @TaskAction
    void doAction() {
        def oldApkPath = project.extensions.reinforceAppInfo.apkPath
        def qhJar = project.extensions.reinforceAppInfo.qihuPath
        def keyStorePath = project.extensions.reinforceAppInfo.keyStorePath
        def keyStorePass = project.extensions.reinforceAppInfo.keyStorePass
        def keyStoreKeyAlias = project.extensions.reinforceAppInfo.keyStoreKeyAlias
        def keyStoreKeyAliasPass = project.extensions.reinforceAppInfo.keyStoreKeyAliasPass
        execCmd("java -jar ${qhJar} -login 360账号 密码")
        execCmd("java -jar ${qhJar}  -importsign ${keyStorePath} ${keyStorePass} ${keyStoreKeyAlias} ${keyStoreKeyAliasPass}")
        execCmd("java -jar ${qhJar} -importmulpkg ${project.extensions.reinforceAppInfo.channelPath}")
        def outputPath = project.extensions.reinforceAppInfo.outputPath
        if (!outputPath.endsWith("/")) {
            outputPath += "/"
        }
        def projectName = project.extensions.reinforceAppInfo.projectName
        def projectVersion = project.extensions.reinforceAppInfo.projectVersion
        def apkOutputDir = outputPath
        if (projectName){
            apkOutputDir += projectName
        }
        if (projectVersion){
            apkOutputDir += projectVersion
        }
        def tmp = new File(apkOutputDir)
        if (!tmp.exists()) {
            tmp.mkdirs()
        }
        execCmd("java -jar ${qhJar} -jiagu ${oldApkPath} ${apkOutputDir} -autosign  -automulpkg")
    }

    void execCmd(cmd) {
        project.exec {
            executable 'bash'
            args '-c', cmd
        }
    }
}

这里参考360加固的命令行加固相关文档即可,建议路径为相对路径。

  • 发布plugin
uploadArchives {
    repositories {
        mavenDeployer {
            //设置插件的GAV参数
            pom.groupId = 'com.ysjk.gradle.plugin'
            pom.artifactId = 'reinforce'
            pom.version = '1.0.2'
            pom.packaging = 'jar'
            //文件发布到下面目录
//            repository(url: 'file:////Users/keecham/project/PublishPlugin/localMaven')
            repository(url: 'http://192.168.1.80:8081/nexus/content/repositories/YsjkPlugin'){

                authentication(userName: 'admin',password: 'admin123')// maven授权信息

            }
        }
    }
}

发布到maven仓库.


7567917-e19d9cc9df4210a1.png
发布
  • 8.使用
    repositories增加我们的maven地址
maven { url 'http://192.168.1.80:8081/nexus/content/repositories/YsjkPlugin/' }

dependencies增加我们的插件

classpath 'com.ysjk.gradle.plugin:reinforce:1.0.2'

引入我们的插件

apply plugin: 'com.ysjk.plugin.reinforceApp'

配置加固信息

reinforceAppInfo {
    qihuPath = '/Users/keecham/Downloads/360firm_mac/jiagu/jiagu.jar'
    apkPath = "${project.rootDir.absolutePath + "/apk/"}com.user.baiyaohealth${rootProject.ext.versionName}_prod-release.apk"
    keyStorePath = 'jksfile/ynbyRelease.jks'
    keyStorePass = '1'
    keyStoreKeyAlias = '2'
    keyStoreKeyAliasPass = '3'
    channelPath = '/Users/keecham/Desktop/account.txt'
    outputPath = '/Users/keecham/Desktop/prod'
    projectName = 'ysjk'
    projectVersion = rootProject.ext.versionName
}
7567917-81b96c5d68f595e5.png
执行task
发布了35 篇原创文章 · 获赞 2 · 访问量 4378
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章