gradle java应用程序的Proguard示例

gradle java应用程序的Proguard示例,java,gradle,proguard,Java,Gradle,Proguard,我不熟悉模糊处理,并试图找出如何模糊处理使用gradle创建的java应用程序。这个想法是在gradle构建之后创建的可运行jar被模糊化了。这是格雷德尔档案 plugins { // Apply the java plugin to add support for Java id 'java' // Apply the application plugin to add support for building a CLI application. id 'ap

我不熟悉模糊处理,并试图找出如何模糊处理使用gradle创建的java应用程序。这个想法是在gradle构建之后创建的可运行jar被模糊化了。这是格雷德尔档案

plugins {
    // Apply the java plugin to add support for Java
    id 'java'
    // Apply the application plugin to add support for building a CLI application.
    id 'application'
}
repositories {
     mavenCentral()
}
dependencies {
    // This dependency is used by the application.
    implementation 'com.google.guava:guava:29.0-jre'
    // Use JUnit test framework
    testImplementation 'junit:junit:4.13'
}
application {
    // Define the main class for the application.
    mainClassName = 'com.abc.gradle.hello.App'
}
jar {
    manifest {
        attributes 'Main-Class': 'com.abc.gradle.hello.App'
    }
}
    

最后,我可以通过以下步骤实现这一点

  • 创建一个可运行的jar,将所有依赖库复制到“dependencies”目录,并在清单中添加类路径

    task createJar(type: Jar) {
       println("Cleaning...")
       clean
       manifest {
       attributes('Main-Class': 'com.abc.gradle.hello.App',
         'Class-Path': configurations.default.collect { 'dependencies/' + 
          it.getName() }.join(' ')
          )
       }
       from {
          configurations.compile.collect { it.isDirectory() ? it : zipTree(it) 
          }
       } with jar
       println "${outputJar} created"
       }
    
  • 复制依赖项

    task copyDepends(type: Copy) {
      from configurations.default
      into "${dependsDir}"
    }
    
  • 用Proguard混淆库

    task proguard(type: proguard.gradle.ProGuardTask) {
       println("Performing obfuscation..")
       configuration 'proguard.conf'
       injars "${outputJar}"
       outjars "${buildDir}/libs/${rootProject.name}_proguard.jar"
       libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
       libraryjars "${dependsDir}"
     }
    
  • 这是完整的构建

    buildscript {
     repositories {
        mavenCentral()
     }
     dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.0.3'
        classpath 'net.sf.proguard:proguard-base:6.0.3'
     }
    }
    
    plugins {
     id 'java'
     id 'application'
    }
    
    repositories {
      mavenCentral()
    }
    
    dependencies {
       implementation 'org.slf4j:slf4j-api:1.7.30'
       implementation 'ch.qos.logback:logback-classic:1.2.3'
       implementation 'ch.qos.logback:logback-core:1.2.3'
       testImplementation 'junit:junit:4.13'
    }
    
    def outputJar = "${buildDir}/libs/${rootProject.name}.jar"
    def dependsDir = "${buildDir}/libs/dependencies/"
    def runnableJar = "${rootProject.name}_fat.jar";
    
    task copyDepends(type: Copy) {
     from configurations.default
     into "${dependsDir}"
    }
    
    task createJar(type: Jar) {
     println("Cleaning...")
     clean
     manifest {
        attributes('Main-Class': 'com.abc.gradle.hello.App',
                'Class-Path': configurations.default.collect { 'dependencies/' + 
       it.getName() }.join(' ')
        )
      }
      from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
       } with jar
       println "${outputJar} created"
      }
    
    task proguard(type: proguard.gradle.ProGuardTask) {
       println("Performing obfuscation..")
       configuration 'proguard.conf'
       injars "${outputJar}"
       outjars "${buildDir}/libs/${rootProject.name}_proguard.jar"
    
       libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
       libraryjars "${dependsDir}"
    
      }
    
    Proguard.conf

    -keep public class * {
       public * ;
     }
    
    用于混淆的Gradle命令

    gradle createJar
    gradle copyDepends
    gradle proguard
    

    最后,我可以通过以下步骤实现这一点

  • 创建一个可运行的jar,将所有依赖库复制到“dependencies”目录,并在清单中添加类路径

    task createJar(type: Jar) {
       println("Cleaning...")
       clean
       manifest {
       attributes('Main-Class': 'com.abc.gradle.hello.App',
         'Class-Path': configurations.default.collect { 'dependencies/' + 
          it.getName() }.join(' ')
          )
       }
       from {
          configurations.compile.collect { it.isDirectory() ? it : zipTree(it) 
          }
       } with jar
       println "${outputJar} created"
       }
    
  • 复制依赖项

    task copyDepends(type: Copy) {
      from configurations.default
      into "${dependsDir}"
    }
    
  • 用Proguard混淆库

    task proguard(type: proguard.gradle.ProGuardTask) {
       println("Performing obfuscation..")
       configuration 'proguard.conf'
       injars "${outputJar}"
       outjars "${buildDir}/libs/${rootProject.name}_proguard.jar"
       libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
       libraryjars "${dependsDir}"
     }
    
  • 这是完整的构建

    buildscript {
     repositories {
        mavenCentral()
     }
     dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.0.3'
        classpath 'net.sf.proguard:proguard-base:6.0.3'
     }
    }
    
    plugins {
     id 'java'
     id 'application'
    }
    
    repositories {
      mavenCentral()
    }
    
    dependencies {
       implementation 'org.slf4j:slf4j-api:1.7.30'
       implementation 'ch.qos.logback:logback-classic:1.2.3'
       implementation 'ch.qos.logback:logback-core:1.2.3'
       testImplementation 'junit:junit:4.13'
    }
    
    def outputJar = "${buildDir}/libs/${rootProject.name}.jar"
    def dependsDir = "${buildDir}/libs/dependencies/"
    def runnableJar = "${rootProject.name}_fat.jar";
    
    task copyDepends(type: Copy) {
     from configurations.default
     into "${dependsDir}"
    }
    
    task createJar(type: Jar) {
     println("Cleaning...")
     clean
     manifest {
        attributes('Main-Class': 'com.abc.gradle.hello.App',
                'Class-Path': configurations.default.collect { 'dependencies/' + 
       it.getName() }.join(' ')
        )
      }
      from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
       } with jar
       println "${outputJar} created"
      }
    
    task proguard(type: proguard.gradle.ProGuardTask) {
       println("Performing obfuscation..")
       configuration 'proguard.conf'
       injars "${outputJar}"
       outjars "${buildDir}/libs/${rootProject.name}_proguard.jar"
    
       libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
       libraryjars "${dependsDir}"
    
      }
    
    Proguard.conf

    -keep public class * {
       public * ;
     }
    
    用于混淆的Gradle命令

    gradle createJar
    gradle copyDepends
    gradle proguard
    

    这些可能会有所帮助:在jar上运行proguard没有问题,。我需要一个解决方案将它集成到GradleProjectGradle插件中:这些可能会有帮助:在jar上运行proguard没有问题,。我需要一个解决方案将其集成到gradle projectGradle插件中: