gradle执行cmd脚本

gradle执行cmd脚本,第1张

gradle执行cmd脚本

最近有需求要在客户端打包完成后去执行加固命令,因为加固方提供的是一个jar包,所以要我们要在打包结束后再去执行行java -jar命令调用加固。

从gradle官网上了解到是有一个task去执行cmd命令,于是尝试了一下,确实生效

参考让gradle执行cmd 或者其他exe命令的方法_道哥的技术博客 -CSDN博客_gradle执行cmd命令

但是如果我们的文件名是动态变化的,需要动态的传参,简单尝试之后发现用gradle这种通用传参方法是不生效的。(如下代码是不生效的)

task justEnhanceSoFileTask(type: Exec, description: '执行加固so File  *** 作'){
    workingDir  'nboxSoFile'
    def myCommond = [
                      commandLine ”cmd“, ”/c“, 
                                "java",
                                "-jar", "${rootProject.rootDir}/app/tools/reinforce.jar",
                                "-p", "${param}",
                                "-d", "${param2}",
                    ]
    commandLine  myCommond
}

又了解到可以直接调用shell脚本文件,于是产生如下想法  可以把参数直接传入到shell脚本中  但是没有实践,参考Gradle调用shell脚本和python脚本并传参 - 简书

task myPrebuildTask(type: Exec) {
    workingDir "$projectDir/mySubDir"
    if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
        commandLine 'cmd', '/c', 'mycommand'
    } else {
        commandLine 'sh', '-c', 'mycommand'
    }
}

因为grovvy是基于jvm的,可以完美的调用java的方法,从之前同事写的代码看到可以使用ProcessBuilder去直接在gradle文件中执行shell命令并打印出相关的日志,于是采用了如下方法:

tasks.whenTaskAdded { task -> 
    def taskName = task.name
    if (taskName != "assembleRelease") {
        return
    }

    task.doLast {
        android.applicationVariants.all { variant ->
            if (!variant.name.endsWith("Release")) {
                return
            }

            ......

            // 加固apk
            runCommand("java",
                    "-jar", "${rootProject.rootDir}/app/tools/reinforce.jar",
                    "-p", "${tempPath.getPath()}",
                    "-d", "${reinforceOutputPath.getPath()}")

            ......
        }
    }
}

def runCommand(String... command) {
    ProcessBuilder processBuilder = new ProcessBuilder()
    processBuilder.redirectErrorStream(true)
    processBuilder.command(command)
    Process process = processBuilder.start()
    println("process start")
    InputStreamReader inputReader = new InputStreamReader(process.getInputStream(), "UTF-8")
    BufferedReader bufferedReader = new BufferedReader(inputReader)
    String line
    while ((line = bufferedReader.readLine()) != null) {
        println(line)
    }
    process.waitFor()
    println("process finish")
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5660608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存