Использование ProGuard для запутывания кода - PullRequest
1 голос
/ 22 сентября 2010

Я выбрал ProGuard, и вот параметры, с которыми я его настроил:

Сжатие

Параметры:

  • Уменьшить

Сохранить:

  • Приложения
  • Апплеты

Также сохранить:

  • Перечисления
  • Драйверы базы данных
  • Swing UI L & F

Запутывание

Опции:

  • Запутывание (duh!: P)
  • Перегрузка агрессивно
  • Использование уникальных имен членов класса
  • Использовать имена классов в смешанном регистре
  • Выровнять иерархию пакетов
  • Классы переупаковки

Сохранить имена:

  • Имена собственных методов
  • . Имена методов класса.

Оптимизация

Параметры:

  • Оптимизация
  • Агрессивное объединение интерфейсов

Удаление:

  • [All флажки]

Информация

Предварительная проверка и нацеливание:

  • Предварительная проверка

Согласованность и правильность:

  • Обратите внимание на возможные ошибки в конфигурации
  • Предупреждать о возможном ошибочном вводе
  • Пропустить не-члены класса публичной библиотеки

и когда я беру флягу и ставлю ее как:

, я получаю эту ошибку апплета при запуске:

    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

Я надеюсь, что этодостаточно хорошо, чтобы помочь мне решить это.Что я делаю не так?

1 Ответ

2 голосов
/ 22 сентября 2010

Я думаю, что b.class генерируется из внутреннего класса GamePanel.Так что может быть проблема с внутренними классами. Здесь в Stackoverflow Том упоминал, что он не мог правильно запутать внутренние классы.Предложение здесь также применимо: попробуйте запутать с помощью verbose=true (или с помощью java -jar proguard.jar @ myconfig.pro -verbose).

Я бы также предложил использовать параметр -keepnames (см. manual ) для GamePanel и / или tileOffline, так как это оставит эти классы неизменными при запутывании (по крайней мере, для поиска основной причины проблемы).

Примечание: попробуйте использовать CamelCase имена классов при программировании на Java.

...