【问题标题】:Gradle task to obfuscate java application with Proguard使用 Proguard 混淆 Java 应用程序的 Gradle 任务
【发布时间】:2021-03-09 07:55:52
【问题描述】:

我需要混淆一个依赖于许多外部 jar 的 Java 应用程序。该应用程序由许多模块组成,每个模块都包含 API 和实现 jar。基本上我需要创建一个 gradle 任务来混淆所有这些 jar,这些 jar 可以稍后在 Jenkins 的构建过程中使用。关于 Proguard 的文档很多,但大部分都包含在 Android 应用程序中。

已经在这里参考了官方的 Proguard 文档:Proguard Gradle Plugin

【问题讨论】:

    标签: java gradle proguard obfuscation


    【解决方案1】:

    我可以通过以下 gradle 配置来实现这一点

    • 复制所有依赖的jar到一个目录

      def dependsDir = "${System.getProperty('user.dir')}/dependencies/"
      task copyDepends(type: Copy) {
        from configurations.compile
        into "${dependsDir}"
      }
      
    • 创建一个类型为proguard.gradle.ProGuardTask的 gradle 任务。injars 列表在目录中可用,并在 gradle 任务中迭代名称。

      buildscript {
      repositories {
        mavenCentral()
      }
      dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.0.3'
        classpath 'net.sf.proguard:proguard-base:6.0.3'
      }
      }
       task proguard(type: proguard.gradle.ProGuardTask) {
          configuration 'proguard.conf'
          def inputDir = new File("${System.getProperty('user.dir')}/inputJars")
         def  outputDir = "${System.getProperty('user.dir')}/inputJars"
          println ("List of jars for obfuscation : ")
          inputDir.eachFileRecurse (FileType.FILES) { file ->
                println(file.getName())
                injars file
                outjars "${outputDir}/${file.getName()}"
            }
      
         libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
         libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
         libraryjars "${System.getProperty('user.dir')}/dependencies/"
       }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多