ProGuard打破了Java应用程序 - 没有文字,没有图像

时间:2011-02-11 02:42:57

标签: java obfuscation proguard

我正在尝试使用ProGuard来混淆Java应用程序。我遇到了一个问题,我的所有文本和图像都从GUI(Swing)表单中消失了。我已经尝试过禁用优化并包含更多库,但似乎没有任何工作。

我已经用反编译器检查了混淆器生成的输出,我的资源路径似乎仍然是正确的。

  1. 我是否需要在jre / lib / rt.jar之外包含更多核心Java库?
  2. 我应该禁用更多设置吗?
  3. ...其他建议?
  4. 感谢。

2 个答案:

答案 0 :(得分:3)

您的资源很可能是(a)通过ProGuard在包含资源的包进行模糊处理时更改的路径进行访问,或者(b)因为未将其复制到输出JAR而被删除。

您不需要在配置中明确包含Java运行时类。

您可能需要查看以下选项:

  

-adaptclassstrings [class_filter]指定对应于类名的字符串常量也应该进行模糊处理。如果没有过滤器,则会调整与类名对应的所有字符串常量。使用过滤器,只调整与过滤器匹配的类中的字符串常量。例如,如果您的代码包含大量引用类的硬编码字符串,并且您不想保留其名称,则可能需要使用此选项。在混淆时主要适用,但相应的类也会自动保留在收缩步骤中。

     

-adaptresourcefilenames [file_filter]根据相应类文件(如果有)的模糊名称指定要重命名的资源文件。如果没有过滤器,则会重命名与类文件对应的所有资源文件。使用过滤器,仅重命名匹配的文件。例如,请参阅处理资源文件。仅在混淆时适用。

     

-adaptresourcefilecontents [file_filter]指定要更新其内容的资源文件。根据相应类的模糊名称(如果有),重命名资源文件中提到的任何类名。没有过滤器,所有资源文件的内容都会更新。使用过滤器,仅更新匹配的文件。使用平台的默认字符集解析和写入资源文件。您可以通过设置环境变量LANG或Java系统属性file.encoding来更改此默认字符集。有关示例,请参阅处理资源文件。仅在混淆时适用。

有关详细信息,请参阅http://proguard.sourceforge.net/manual/examples.html#resourcefiles

答案 1 :(得分:0)

  1. 不可能的。 OTOH,你是什么意思?是不是“核心 Java库 jre / lib / rt.jar”的矛盾?

  2. 因为我有类似的问题,我开始让PG根本不做任何事情,然后允许对我的一部分类等进行模糊处理,这是对问题的二元搜索。最后,我找到了罪魁祸首,可以让几乎所有东西混淆。

  3. 确保您不会吞下任何异常。尝试使用Class.getResource访问图像,以便了解它是否有效。禁用所有内容。