Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Ofuscar Aplicacion Java

Buenas! vengo con un problemita a la hora de ofuscar el codigo de mi aplicacion usando la GUI de ProGuard, ya logre ofuscarlo y que la aplicacion se ejecute, pero tengo un problema con una clase de mi proyecto que se encarga de obtener los datos de un archivo ".json", el problema es que despues de ofuscarlo me devuelve valores nulos, estuve viendo posibles errores y en el proguard note esta advertencia:


Note: com.google.gson.internal.UnsafeAllocator accesses a declared field 'theUnsafe' dynamically
Note: com.google.gson.internal.UnsafeAllocator accesses a method 'allocateInstance(java.lang.Class)' dynamically
Maybe this is library method 'sun.misc.Unsafe { java.lang.Object allocateInstance(java.lang.Class); }'
Note: there were 2 accesses to class members by means of introspection.
You should consider explicitly keeping the mentioned class members
(using '-keep' or '-keepclassmembers').
(http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclassmember)

La verdad que no entiendo bien a que se refiere ni como solucionarlo.

Otra cosa que note es que si activo la casilla "Use unique class member names" el "json" me devuelve correctamente solo 1 de los valores, los demas siguen siendo nulos :/

Sin la opcion "Use unique class member names" me devuelve estos valores:
{id=null, nombre=null, apellido=null, direccion=null, edad=0}

Con la opcion mensionada me devuelve:
{id='primaria', nombre=null, apellido=null, direccion=null, edad=0}

En el proguard solo utilizo las opciones "Obfuscate" y "Preverify".

Si necesitan mas datos me dicen, ojala me puedan ayudar :D gracias de antemano ;)

octubre 9, 2013 | Registered Commentermasterfenix

Bueno, despues de quemarme el cerebro pensando que podia ser, descubri que es lo que ocasiona el problema, pero nose como solucionarlo de manera eficiente, el problema es que al ofuscar, se cambian los nombres de las variables a las que se le asigna el valor del json, el nombre de la variable debe coincidir con el que esta en el json, porlomenos como yo lo hago, nose si habra otra manera de obtener los datos del json, pero ahora la pregunta, como puedo solucionar este problema? el json lo crea otra aplicacion ajena a la mia, asi que no puedo crear el json con las variables ofuscadas :/ alguien me da una mano porfavor??

octubre 11, 2013 | Registered Commentermasterfenix

Hola, antes de nada no he usado nunca ProGuard pero quizas esto te ayude... parece ser que se puede indicar excepciones.

http://miguelangellv.wordpress.com/2013/04/23/proguard-optimiza-reduce-y-ofusca-el-codigo-de-tus-aplicaciones-android/

Saludos

octubre 12, 2013 | Unregistered Commenterpr0kd

Hola, gracias por responder, la verdad que soy muy nuevo en proguard y poco encuentro en internet, estoy usando la GUI del proguard y la mayoria de opciones nose para que sirven, conoces algun otro ofuscador que sea bueno?

Si habia visto ese articulo pero no lo entendi, creo que sirve solo para android :/

octubre 12, 2013 | Registered Commentermasterfenix

En la web dice esto:
"The -keep option specifies the entry point of the application that has to be preserved"

con lo cual da a entender que hay partes que se pueden reservar, es lo que te queria dar a entender con el enlace. Hechale un vistazo a la parte de Ofuscation en la GUI, ".class method names", quizas te sirve no lo pruebo porque no tengo decompiler.. si conoces algunos bueno.. :P

Saludos

octubre 12, 2013 | Unregistered Commenterpr0kd

Se me ocurrio una muy buena y funciono!! :D estaba armando una imagen en paint para mostrarte las opciones que ya habia probado y se me ocurrio usar el maping para cambiar el nombre que le asigna a cada variable y ponerle el mismo a las que no quiero que cambie y funiono :) pero ahora tengo un gran problema que no se me ocurre nada para solucionarlo, tengo una variable declarada de la siguiente manera:
private List<Formato> datos;
"Formato" es una clase que se le aplica a la variable datos (algo así xD)
y lo que pasa es que después de ofuscar me queda así:
private List datos;
y de esta forma no se le aplica el formato que necesito a la variable datos :/ se te ocurre alguna manera de solucionarlo? gracias por la ayuda :D

ah me olvidaba, respecto a la opción ".class method names" estuve haciendo pruebas y no entendi paraque sirve, la active y escribi el nombre de una clase, de varias, probe con los comodines que da en el tooltip text y nada, no note ningun cambio en el archivo final...

octubre 12, 2013 | Registered Commentermasterfenix

¿Te funciona aun con el List solo? Yo probando tambien veo que el jd-gui automaticamente formatea un List<User> a List a secas... es cosa de la interpretacion del decompiler, supongo. Prueba haber si te funciona ..

Añades alguna opcion al crear el mapping? yo probando solo me muestra en el mapping el metodo main...

Nada, gracias ati por la solución :).

Saludos

octubre 12, 2013 | Unregistered Commenterpr0kd

no, con el list solo no, porque no ejecuta la clase que se llama "Formato", si, nose bien a que se debe, no encuentro otra explicacion que no sea que el ofuscador me este omitiendo el <Formato> (no se como se le llama a esto xD) porque probe en el codigo sin ofuscar que si le borro eso obtengo el mismo resultado que el codigo ofuscado, me devuelve la cadena sin formato :/

el mapping muestra los cambios que realiza el ofuscador en el codigo de tu aplicacion, osea, que nombre le asigna a cada variable, a cada funcion, etc. No añado ninguna otra opcion...

octubre 12, 2013 | Registered Commentermasterfenix