Utilizzando ProGuard al codice Oscurazione
-
04-10-2019 - |
Domanda
Ho scelto ProGuard ed ecco le opzioni che ho configurato con:
Shrinking
Opzioni:
- Shrink
Conserva:
- Applicazioni
- Applet
anche tenere:
- Enumerazioni
- driver di database
- Altalena UI L & F
offuscamento
Opzioni:
- Oscurazione (stato derubato: P)
- Sovraccarico aggressivamente
- Utilizza nomi unico membro di classe
- Utilizzare i nomi delle classi miste Casee
- gerarchia pacchetto Appiattisci
- classi riconfezionare
mantenere i nomi:
- nomi dei metodi nativi
- nomi dei metodi .class
Ottimizzazione
Opzioni:
- Ottimizza
- Unisci interfacce aggressivo
Rimuovi:
- [Tutti controllato le caselle]
Informazioni
Preverifiaction e targeting:
- Preverify
La coerenza e correttezza:
- errori potenziali Nota nella configurazione
- Avvisa input circa possibilmente errornous
- Skip non pubblica i membri della classe biblioteca
e quando prendo il barattolo e messo come:
ottengo questo errore applet sul lancio:
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
Ecco ciò che si trova all'interno del file jar PRIMA della clientOffline.jar
offuscamento:
line_tile/
META-INF/
e qui è ciò che file jar è dopo l'offuscamento per newOne.jar
:
line_tile/
META-INF/
weapon/
me.gif
a.class
b.class
spero che questo è abbastanza buono per aiutarmi a risolvere questo. Che cosa sto facendo di sbagliato?
Soluzione
credo che b.class è generato dalla classe interna GamePanel. Quindi non ci può essere un problema con le classi interne. Qui a StackOverflow Tom hanno detto che non poteva offuscare classi interne in modo corretto. Il suggerimento non vale anche qui:. Tenta di offuscare con verbose=true
(o con java-jar proguard.jar @ myconfig.pro verbose)
Vorrei anche suggerire di utilizzare l'opzione -keepnames (vedere il manuale ) per GamePanel e / o tileOffline poiché lascerà queste classi immutati per un offuscamento (almeno per trovare la causa principale del problema).
Una nota a margine è cercare di utilizzare CamelCase nomi di classi durante la programmazione in Java.