2012-08-24 18 views
6

Estaba tratando de aprender a usar ProGuard, y no es tan fácil como pensaba. Al principio encontré un código Java simple para probarlo, un simple two class Swing calculator.¿Cómo uso ProGuard?

El código se puede encontrar siguiendo ese enlace, pero me pareció demasiado detallado para publicarlo aquí. De todos modos, es una aplicación simple con punto de entrada en Calc.main(), no hay paquetes.

Entonces compilan las dos fuentes con:

$ javac *.java 

y creó el archivo .jar (porque parece ProGuard sólo funcionan con los tarros):

$ jar cvef Calc calc.jar *.class 
added manifest 
adding: Calc.class(in = 3869) (out= 2126)(deflated 45%) 
adding: Calc$ClearListener.class(in = 468) (out= 327)(deflated 30%) 
adding: CalcLogic.class(in = 1004) (out= 515)(deflated 48%) 
adding: Calc$NumListener.class(in = 1005) (out= 598)(deflated 40%) 
adding: Calc$OpListener.class(in = 1788) (out= 1005)(deflated 43%) 

escribió el archivo ProGuard llamado obfuscate.pro:

-injars  calc.jar 
-outjars  calc_obf.jar 
-libraryjars <java.home>/lib/rt.jar 

-keep public class Calc extends javax.swing.JFrame { 
public static void main(java.lang.String[]); 
} 

Y finalmente ejecutar ProGuard:

$ ~/progs/proguard/proguard4.8/bin/proguard.sh @obfuscate.pro 
ProGuard, version 4.8 
Reading program jar [/home/lucas/tmp/calc.jar] 
Reading library jar [/usr/lib/jvm/java-7-openjdk-i386/jre/lib/rt.jar] 
Error: The output jar is empty. Did you specify the proper '-keep' options? 

Bueno, obviamente no funcionó. Me cansé de jugar con los parámetros de ProGruard, especialmente con las opciones -keep, sin éxito. Todo lo que encontré en los documentos relacionados con mi problema no pudo ayudarme. Entonces estoy recurriendo a ti ... ¿Qué pasa? ¿Cómo hacerlo bien?

+0

Su método 'main' está en mayúscula, lo que seguramente no debería ser. –

+0

@LouisWasserman Derecha, arreglado. Todavía tiene el mismo ploblema. – lvella

+0

Esto se ve bien para mí. ¿Puede cargar su jar y su configuración de ProGuard en alguna parte, para que podamos probar soluciones en lugar de simplemente adivinar qué podría estar mal en su computadora? –

Respuesta

4

que tengo que trabajar con el siguiente fichero de configuración:

-injars  calc.jar 
-outjars  calc_obf.jar 
-libraryjars <java.home>/lib/rt.jar 
-keep class Calc { 
    public static void main(java.lang.String[]); 
} 

Lo más notable es que se deshizo de la public frente a class Calc.

1

Tuve problemas similares, solucionados eliminando los modificadores de Java.

modificadores

Java como modificadores de visibilidad son opcionales en la opción de archivo de configuración -keep ProGuard (y en las opciones relacionadas -keepclassmembers etc.)

De Manual: -Mantenga [, modificador, ...] class_specification

De lo contrario, a menos que exista una razón específica, de lo contrario, puede omitirlos.

Cuestiones relacionadas