【问题标题】:ProGuard breaks Java application - no text, no imagesProGuard 破坏 Java 应用程序 - 没有文本,没有图像
【发布时间】:2011-02-11 02:42:56
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: java obfuscation proguard


    【解决方案1】:

    您的资源很可能是 (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

    【讨论】:

    • 感谢您的想法,我会试一试。
    • 我知道 ProGuard 可以处理这种事情。我有几个与图标和其他图像捆绑在一起的 GUI 应用程序,它适用于这些应用程序。不过,在我的情况下,我认为图像通常被捆绑到 JAR 的根目录中。
    • 此问题与 NetBean 的 GUI 构建器和与类关联的 *.property 文件有关。它将它们放在资源文件夹中,并且没有被混淆......所以有问题。这里的解决方案说不要混淆这些类名。 sourceforge.net/projects/proguard/forums/forum/182456/topic/…不知道有没有更好的解决方案?
    【解决方案2】:
    1. 不可能。哦,你什么意思? “core Java 库 outside of jre/lib/rt.jar”不是矛盾吗?

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

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

    【讨论】:

    • 抱歉,对 Java 还是有点陌生​​。我在 Java 安装目录中看到了其他一些 jar,例如 charsets.jar,并认为这可能与我丢失的文本有关。谢谢你的建议,我去看看哪里能找到。
    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2017-10-30
    • 2011-09-19
    相关资源
    最近更新 更多