1

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

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

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

谢谢。

4

2 回答 2

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 。

于 2011-02-11T07:21:37.853 回答
0
  1. 不可能的。哦,你什么意思?“ jre/lib/rt.jar之外的核心Java 库”不是矛盾的吗?

  2. 因为我有类似的问题,。我开始让 PG 什么都不做,然后允许对我的部分类进行混淆,等等,这是一种对问题的二分搜索。最后,我找到了罪魁祸首,几乎可以让一切变得模糊。

  3. 确保你没有吞下任何异常。尝试使用 Class.getResource 访问图像,以了解它是否有效。禁用一切。

于 2011-02-11T02:55:18.637 回答