2010-09-22 16 views
1

j'ai choisi ProGuard et voici les options que je configuré avec:En utilisant ProGuard pour obscurcir le code

Shrinking

Options:

  • Shrink

Conserver :

  • Applications
  • Applets

Aussi garder:

  • énumérations
  • pilotes de base de données
  • UI swing L & F

obscurcissement

Options:

  • Occultation (duh! : P)
  • surcharge agressive
  • Utilisez les noms des membres de la classe unique de
  • Utilisez des noms de classe mixte casée
  • package Aplatir hiérarchie
  • Cours reconditionner

noms Conserver:

  • noms de méthodes natives
  • .Les noms de méthode de classe

Optimisation

Options:

  • Optimize
  • interfaces de fusion agressive

Supprimer:

  • [Toutes les cases cochées]

Informations

Preverifiaction et ciblage:

  • Preverify

Cohérence et exactitude:

  • Remarque erreurs potentielles dans la configuration
  • mettre en garde peut-être entrée errornous
  • Ignorer les membres de la classe bibliothèque non publiques

et quand je prends le pot et le mettre comme:

Je reçois cette erreur d'applet lors du lancement:

 
    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 

Voici ce qui est dans le fichier jar AVANT l'obscurcissement clientOffline.jar:

line_tile/ 
META-INF/ 

et voici ce que jar est après le faux-fuyants à newOne.jar:

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

J'espère c'est assez bon pour m'aider à résoudre cela. Qu'est-ce que je fais mal?

Répondre

2

Je suppose que b.class est généré à partir de la classe interne GamePanel. Donc, il peut y avoir un problème avec les classes internes. Here à Stackoverflow Tom a mentionné qu'il ne pouvait pas obscurcir correctement les classes internes. La suggestion ici s'applique également ici: essayez de masquer avec verbose=true (ou avec java -jar proguard.jar @ myconfig.pro -verbose).

Je suggère également d'utiliser l'option -keepnames (voir manual) pour GamePanel et/ou tileOffline car il laissera ces classes inchangées par l'obfuscation (au moins pour trouver la cause première du problème). Une note de côté essaie d'utiliser les noms de classes CamelCase lors de la programmation en Java.

+0

Uhm, j'ai l'option garder les noms cochée. Mais ce serait java -jar proguard.jar @ myconfig.pro -verbose -keepnames? – nn2

+0

"-keepnames class_specification" est le format correct où la spécification de classe peut être "class tileOffline" dans ce cas – rics