2009-07-22 15 views
6

Ofusco una biblioteca con ProGuard usando la tarea Ant.Exponer clases internas cuando se ofusca con ProGuard

me quedo con los nombres de clases particulares y sus nombres de método cuando tienen una anotación en particular (@ApiAll) y estoy solicitando que los InnerClasses atribuyen ser mantenido:

<keepattribute name="InnerClasses" /> 
    <keep annotation="com.example.ApiAll"/> 
    <keepclassmembers annotation="com.example.ApiAll"> 
    <constructor access="public protected"/> 
    <field access="public protected"/> 
    <method access="public protected"/> 
    <constructor access="protected"/> 
    </keepclassmembers> 

Si puedo comprobar la salida de la cartografía archivo Puedo ver que mi clase interna que tiene la anotación y sus miembros mantienen sus nombres sin ofuscación. Sin embargo, cuando miro en el archivo jar generado no puedo encontrar la clase.

¿Echo de menos algo? ¿Por qué el mapeo me dice que mantiene esta clase cuando no lo está?

Respuesta

20

Debe especificar que desea mantener la clase interna utilizando la notación adecuada. En el lenguaje proguard, eso significa -keep class my.outer.Class$MyInnerClass. La clave aquí es usar el signo de dólar ($) como el separador entre la clase interna y externa. Para hacerlo, también debe especificar -keepattributes InnerClasses, para que el nombre MyInnerClass no se ofusque. Estas dos configuraciones juntas deberían permitir que sus clases internas se mantengan intactas.

+0

Gracias Markus. Esto me ayudó a resolver mi problema – Fenil

+0

Esta es la respuesta correcta para el mismo problema con yGuard – ygesher

0

La opción keepclassmembers solo conserva los miembros de clase especificados (y sus nombres).

Es probable que la opción más común keep, que conserva las clases especificadas y miembros de la clase (y sus nombres).

Cfr. ProGuard manual > Usage > Overview of Keep Options

Cuestiones relacionadas