Estoy trabajando en una biblioteca que se distribuye como java jar, y estoy ejecutando Proguard de forma que solo quede expuesta la interfaz requerida. Tengo una clase de configuración con un grupo de variables miembro y algunas definiciones enum. Mi script proguard conserva bien las variables miembro, sin embargo, las definiciones enum están siendo ofuscadas. He intentado todo lo que se me ocurre para obligar a Proguard a conservar estas enumeraciones públicas y definidas internamente, pero no puedo lograr que funcione.Proguard no mantendrá las enumeraciones de un miembro de la clase
En este momento estoy usando:
-keep public class com.stuff.MyConfigObject {
public *;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
Si trato:
-keep public enum com.stuff.MyConfigObject.MyEnum
Me aparece un error ambiguo: "Nota: la configuración se refiere a la 'com.stuff clase desconocida .MyConfigObject.MyEnum '"
¡Gracias por la ayuda!
¡Gracias eso me ha acercado mucho más! Sin embargo, el .jar resultante es un poco raro. Los archivos de clase para las enumeraciones están allí, y todo parece estar bien, pero en Eclipse, ninguno de los miembros puede usarse. La finalización del código los muestra correctamente, pero la compilación sigue fallando con "MyEnum no se puede resolver o no es un campo". Estoy usando proguard 4.4. – Jesse
Encontré que si agrega '-keepAttributes **' funcionará. No estoy seguro de qué atributo (s) particular (es) debe (n) conservarse, pero con la [referencia de Proguard] (http://proguard.sourceforge.net/manual/usage.html#keepattributes) y algo de experimentación, apuesto a que podría averiguarlo. –
Gracias @Kevin K, eres un salvavidas. ¡Funciona de maravilla! – Jesse