Proguard伤害和图书馆

时间:2012-05-28 19:27:56

标签: java obfuscation proguard

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

喜欢这个吗?

  • 伤害MyApp.jar

  • 伤害第三方免费

  • 伤害第二方第三方等等

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

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

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

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

  • -injars class_path

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

  • -libraryjars class_path

指定要处理的应用程序的库jar(或aars,wars,ear,zips,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. 虽然这看起来很麻烦,但它允许您处理针对不同运行时环境的应用程序。例如,您可以通过指定适当的运行时jar来处理J2SE应用程序以及JME midlet或Android应用程序。

我的结果 `

  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
  5. 至于第三部分lib,有一些区别。

      

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

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

答案 2 :(得分:0)

以下是真实的:

-injars MyApp.jar

-libraryjars 3rd party lib

请勿放置系统路径,例如:${java.home} proguard无法理解。

答案 3 :(得分: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