2010-09-22 162 views
1

我选择ProGuard,并将这里的选项我配置的:使用ProGuard混淆代码

收缩

选项:

  • 收缩

保持:

  • 应用
  • 小程序

同时请:

  • 枚举
  • 数据库驱动程序
  • 的Swing UI l文件&˚F

混淆

选项:

  • 模糊处理(咄! :P)
  • 超载积极
  • 使用唯一的类成员名称
  • 使用混合casee类名
  • 拼合包层次
  • 重新包装类

保持名称:

  • 原生方法名称
  • 。类方法的名字

优化

选项:

  • 优化
  • 合并接口积极

删除:

  • [所有箱子检查]

信息

Preverifiaction和定位:

  • 预验证

一致性和正确性:

  • 注意在配置造成的潜在错误
  • 发出警告可能errornous输入
  • 跳过非公共图书馆类成员

,当我把罐子并把它作为:

我得到这个小程序时发布的错误:

 
    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 

这里是什么是里面的jar文件进行模糊clientOffline.jar BEFORE:

line_tile/ 
META-INF/ 

,这里是该JAR文件是什么混淆到newOne.jar AFTER:

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

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

回答

2

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

我还建议为GamePanel和/或tileOffline使用-keepnames选项(请参阅manual),因为它会通过模糊处理(至少找出问题的根本原因)使这些类保持不变。

在使用Java进行编程时,请注意使用CamelCase类名。

+0

呃,我有保留名称选项检查。但它会是'java -jar proguard.jar @ myconfig.pro -verbose -keepnames'吧? – nn2 2010-09-22 14:50:09

+0

“-keepnames class_specification”是在这种情况下类规范可以是“class tileOffline”的正确格式 – rics 2010-09-23 07:05:37