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

2019-12-30  本文已影响0人  吃饱了就送

项目地址

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

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()
}
implementation-class=com.ysjk.plugin.ReinforceAppPlugin
class ReinforceAppPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.extensions.create("reinforceAppInfo", ReinforceAppInfoExtension.class)
        project.tasks.create("reinforceApp", ReinforceAppTask.class)
    }
}
class PublishAppInfoExtension {
    String qihuPath //360加固包(jiagu.jar)的文件路径
    String keyStorePath //keyStor文件路径
    String keyStorePass //keyStor密码
    String keyStoreKeyAlias //keyStoreKeyAlias
    String keyStoreKeyAliasPass //keyStoreKeyAlias密码
    String channelPath //渠道文件路径
    String outputPath //文件夹输出路径
}
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加固的命令行加固相关文档即可,建议路径为相对路径。

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仓库.


发布
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
}
执行task
上一篇 下一篇

猜你喜欢

热点阅读