Proguardを使用してコードを難読化します
-
04-10-2019 - |
質問
私はProguardを選びました、そしてこれが私がそれを構成したオプションです:
収縮
オプション:
- シュリンク
保つ:
- アプリケーション
- アプレット
また、維持:
- 列挙
- データベースドライバー
- スイングui l&f
難読化
オプション:
- 難読化(duh!:p)
- 積極的に過負荷
- 一意のクラスメンバー名を使用します
- 混合caseeクラス名を使用します
- 平らなパッケージ階層
- クラスの再パッケージ
名前を保持します:
- ネイティブメソッド名
- 。クラスメソッド名
最適化
オプション:
- 最適化
- インターフェイスを積極的にマージします
削除する:
- チェックされたすべてのボックス
情報
Preverifiactionとターゲティング:
- Preverify
一貫性と正しさ:
- 構成の潜在的な間違いに注意してください
- おそらく間違った入力について警告します
- 非公開図書館のクラスメンバーをスキップします
そして、私が瓶を取り、それを次のようにするとき:
起動時にこのアプレットエラーが発生します。
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
:
line_tile/
META-INF/
そして、ここにそのjarファイルが難読化の後のものがあります newOne.jar
:
line_tile/
META-INF/
weapon/
me.gif
a.class
b.class
これが私がこれを解決するのに役立つことを願っています。私は何が間違っているのですか?
解決
B.ClassはGamepanelインナークラスから生成されていると思います。したがって、内部クラスに問題がある可能性があります。 ここ Stackoverflowでは、トムは内部クラスを正しく困らせることはできないと述べました。ここでの提案もここにも当てはまります: verbose=true
(またはjava -jar proguard.jar @myconfig.pro -verbose)。
また、-keepnamesオプションを使用することをお勧めします(参照 マニュアル)Gamepanelおよび/またはTileOfflineの場合、これらのクラスは難読化によって変化しないようにするため(少なくとも問題の根本原因を見つけるため)。
サイドノートは使用してみてください キャメルケース Javaでプログラミングするときのクラス名。
所属していません StackOverflow