2012-06-10 17 views
18

Hola, estoy escribiendo una aplicación de Android y he configurado Proguard para ofuscar mi aplicación. Sin embargo, uso un cargador de clases para cargar dinámicamente diferentes extensiones a mi aplicación. El problema es que estos no se cargan correctamente si cambian sus nombres. ¿Cómo evito que Proguard ofusque nombres de clases específicos?Proguard mantener los nombres de las clases?

Respuesta

27

Utilice la opción -keepnames en su proguard.cfg

Consulte el manual de https://www.guardsquare.com/en/proguard/manual/usage#keepoptions:

-keepnames class_specification

corto para -keep,allowshrinking class_specification

Especifica las clases y los miembros de la clase cuyos los nombres deben conservarse, si no están eliminado en la fase de contracción. Por ejemplo, es posible que desee conservar todos los nombres de clase de las clases que implementan la interfaz Serializable, de modo que el código procesado siga siendo compatible con las clases originalmente serializadas. Las clases que no se usan en absoluto aún se pueden eliminar. Solo aplicable cuando se ofusca.

+3

Lo mismo ocurre con el tipo i: -keepnames com.randompackage.lol.ClassName – Nik

+0

Ok hay una manera de hacerlo con un paquete completo? – Nik

+0

Sí, usa el * comodín. es decir, -keepnames com.randompackage.lol. * Mantendré todas las clases en lol –

24

Esto mantiene classnames intacta:

-keepnames class com.somepackage.* 
9

Consejo práctico para todo el mundo que no quiere ProGuard para cambiar cualquier nombre clase:

# please KEEP ALL THE NAMES 
-keepnames class ** { *; } 

De esta manera obtendrá seguimientos de pila legibles mientras sigue tirando cosas que no necesita. :-)

+9

'' '-dontobfuscate''' es la forma correcta de desactivar la ofuscación. –

+0

Manera incorrecta. Es mejor desactivar la ofuscación con esta configuración: "-dontobfuscate/n -optimizations! Code/allocation/variable" – oxied

Cuestiones relacionadas