1

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

收缩

选项:

  • 收缩

保持:

  • 应用
  • 小程序

同时保持:

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

混淆

选项:

  • 混淆(呃!:P)
  • 积极超载
  • 使用唯一的类成员名称
  • 使用混合大小写的类名
  • 扁平化包层次结构
  • 重新打包类

保留姓名:

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

优化

选项:

  • 优化
  • 积极合并接口

消除:

  • [选中所有框]

信息

预验证和定位:

  • 预验证

一致性和正确性:

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

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

启动时出现此小程序错误:

    java.lang.RuntimeException:java.lang.NoClassDefFoundError:b
        在 sun.plugin2.applet.Plugin2Manager.createApplet(未知来源)
        在 sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(未知来源)
        在 java.lang.Thread.run(未知来源)
    引起:java.lang.NoClassDefFoundError: b
        在 java.lang.Class.getDeclaredConstructors0(本机方法)
        在 java.lang.Class.privateGetDeclaredConstructors(未知来源)
        在 java.lang.Class.getConstructor0(未知来源)
        在 java.lang.Class.newInstance0(未知来源)
        在 java.lang.Class.newInstance(未知来源)
        在 sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
        在 java.awt.event.InvocationEvent.dispatch(未知来源)
        在 java.awt.EventQueue.dispatchEvent(未知来源)
        在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源)
        在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源)
        在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源)
        在 java.awt.EventDispatchThread.pumpEvents(未知来源)
        在 java.awt.EventDispatchThread.pumpEvents(未知来源)
        在 java.awt.EventDispatchThread.run(未知来源)
    引起:java.lang.ClassNotFoundException:b
        在 sun.plugin2.applet.Applet2ClassLoader.findClass(未知来源)
        在 java.lang.ClassLoader.loadClass(未知来源)
        在 java.lang.ClassLoader.loadClass(未知来源)
        ... 14 更多
    引起:java.io.IOException:打开HTTP连接失败:http://mystikrpg.com/b.class
        在 sun.plugin2.applet.Applet2ClassLoader.getBytes(未知来源)
        在 sun.plugin2.applet.Applet2ClassLoader.access$000(未知来源)
        在 sun.plugin2.applet.Applet2ClassLoader$1.run(未知来源)
        在 java.security.AccessController.doPrivileged(本机方法)
        ... 17 更多
    异常:java.lang.RuntimeException:java.lang.NoClassDefFoundError:b

这是混淆之前的 jar 文件内部的内容clientOffline.jar

line_tile/
META-INF/

这是混淆后的 jar 文件newOne.jar

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

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

4

1 回答 1

2

我猜 b.class 是从 GamePanel 内部类生成的。所以内部类可能有问题。在Stackoverflow,Tom 提到他无法正确混淆内部类。那里的建议也适用于此处:尝试使用verbose=true(或使用 java -jar proguard.jar @myconfig.pro -verbose)进行混淆。

I would also suggest to use -keepnames option (see manual) for GamePanel and/or tileOffline since it will leave these classes unchanged by the obfuscation (at least for finding the root cause of the problem).

A side note is try to use CamelCase class names when programming in Java.

于 2010-09-22T07:14:38.673 回答