6

我已经使用 Eclipse 的 Export as Runnable JAR 文件菜单导出了带有多个 3rd 方库的 Java SE 应用程序。我必须如何设置 Proguard 的injarslibraryjar选项来混淆这个应用程序?

像这样?

  • injars MyApp.jar

  • injars 3rd 方库

  • injars 第二个 3rd 方库等

  • libraryjar ${java.home}/lib/rt.jar

  • libraryjar ${java.home}/lib/jsse.jar

  • libraryjar ${java.home}/lib/jce.jar

所以我必须将第 3 方库设置为injars和?${java.home}/lib/*libraryjar

4

4 回答 4

5

injars包含您要混淆的 jar,以及libraryjars未混淆的第 3 方库。

于 2012-05-28T23:33:57.600 回答
2
  • -injars 类路径

指定要处理的应用程序的输入 jars(或 aars、wars、ears、zip、apks 或目录)。这些 jar 中的类文件将被处理并写入输出 jar。默认情况下,任何非类文件都将被复制而不做任何更改。请注意任何临时文件(例如由 IDE 创建的),尤其是当您直接从目录中读取输入文件时。可以过滤类路径中的条目,如过滤器部分所述。为了更好的可读性,可以使用多个 -injars 选项指定类路径条目。

  • -libraryjars 类路径

指定要处理的应用程序的库 jars(或 aars、wars、ears、zip、apks 或目录)。The files in these jars will not be included in the output jars. The specified library jars should at least contain the class files that are extended by application class files. Library class files that are only called needn't be present,尽管它们的存在可以改善优化步骤的结果。可以过滤类路径中的条目,如过滤器部分所述。为了更好的可读性,可以使用多个 -libraryjars 选项指定类路径条目。请注意,在查找库类时不考虑为运行 ProGuard 设置的引导路径和类路径。This means that you explicitly have to specify the run-time jar that your code will use.尽管这看起来很麻烦,但它允许您处理针对不同运行时环境的应用程序。例如,您可以处理 J2SE 应用程序以及 JME midlets 或 Android 应用程序,只需指定适当的运行时 jar。

我的结果`

  1. -injars MyApp.jar
  2. -libraryjars ${java.home}/lib/rt.jar
  3. -libraryjar ${java.home}/lib/jsse.jar
  4. -libraryjar ${java.home}/lib/jce.jar

至于第三部分库,有一些区别。

指定的库 jar 至少应该包含由应用程序类文件扩展的类文件。仅被调用的库类文件不需要存在

,所以第三部分库可能不需要设置。

于 2016-03-12T06:00:10.483 回答
0

以下情况属实:

-injars MyApp.jar

-libraryjars 3rd party lib

不要把系统路径举例:${java.home} proguard不会明白。

于 2012-05-29T11:21:08.147 回答
0

一个老问题,但我认为仍然相关.. 这是使用 gradle 插件的解决方案

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath 'net.sf.proguard:proguard-gradle:6.2.2'
    classpath 'net.sf.proguard:proguard-base:6.2.2'
}
}

task proguard( type: proguard.gradle.ProGuardTask) {

def inputDir = new File("${System.getProperty('user.dir')}/injars/")
println ("List of jars for obfuscation : ")
inputDir.eachFileRecurse (FileType.FILES) { file ->
        println(file.getName())
        injars file
        outjars "${System.getProperty('user.dir')}/outjars/${file.getName()}"
    }
    
}

libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
libraryjars "${System.getProperty('user.dir')}/dependencies/"

}
  • 将上面的代码添加到你的 build.gradle
  • 执行gradle proguard
于 2020-11-12T13:55:20.107 回答