2010-09-22 208 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