我选择了proguard,这是我配置的选项:

收缩

选项:

  • 收缩

保持:

  • 申请
  • 小程序

也要保留:

  • 枚举
  • 数据库驱动程序
  • 摇摆UI L&F

混淆

选项:

  • 混淆(duh!:p)
  • 积极地超负荷
  • 使用唯一的类成员名称
  • 使用混合式班级名称
  • 平坦的软件包层次结构
  • 重新包装课

保留名称:

  • 本机方法名称
  • .Class方法名称

优化

选项:

  • 优化
  • 积极合并接口

消除:

  • 所有检查的盒子

信息

验证和定位:

  • 预先验证

一致性和正确性:

  • 注意配置中的潜在错误
  • 警告可能错误的输入
  • 跳过非公共图书馆课程成员

当我拿起罐子并将其放为:

启动时我会遇到这个小程序错误:

    java.lang.RuntimeException: java.lang.NoClassDefFoundError: b
        at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NoClassDefFoundError: b
        at java.lang.Class.getDeclaredConstructors0(Native Method)
        at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
        at java.lang.Class.getConstructor0(Unknown Source)
        at java.lang.Class.newInstance0(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: b
        at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 14 more
    Caused by: java.io.IOException: open HTTP connection failed:http://mystikrpg.com/b.class
        at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
        at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
        at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        ... 17 more
    Exception: java.lang.RuntimeException: java.lang.NoClassDefFoundError: b

这是在混淆之前的罐子文件中的内容 clientOffline.jar:

line_tile/
META-INF/

这是杂乱无章的罐子文件 newOne.jar:

line_tile/
META-INF/
weapon/
me.gif
a.class
b.class

我希望这足以帮助我解决这个问题。我究竟做错了什么?

有帮助吗?

解决方案

我想B.类是由GamePanel Inner类生成的。因此,内部类可能存在问题。 这里 在Stackoverflow,汤姆提到他无法正确混淆内部类。该建议在这里也适用:尝试混淆 verbose=true (或使用Java -jar proguard.jar @myconfig.pro -verbose)。

我还建议使用-keknames选项(请参阅 手动的)对于GamePanel和/或Tileoffline,因为它会因混淆而使这些类不变(至少是为了找到问题的根本原因)。

旁注是尝试使用 骆驼香烟盒 Java编程时的类名。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top