1

私は ProGuard を選択しました。設定したオプションは次のとおりです。

収縮

オプション:

  • 縮む

保つ:

  • アプリケーション
  • アプレット

また、保持します:

  • 列挙
  • データベース ドライバー
  • Swing UI L&F

難読化

オプション:

  • 難読化する (duh! :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 で (不明なソース)
        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 で (不明なソース)
        at 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 を使用して) 難読化を試みてください。

また、GamePanel や tileOffline に -keepnames オプション (マニュアルを参照) を使用することをお勧めします。難読化によってこれらのクラスが変更されないためです (少なくとも問題の根本原因を見つけるため)。

Java でプログラミングするときは、 CamelCaseクラス名を使用するようにしてください。

于 2010-09-22T07:14:38.673 に答える