Comment dire proguard de garder enum constantes et les champs

J'ai essayer de camoufler notre application web qui utilisent le printemps, jaxb, et s'appuie sur les annotations, et de la réflexion fortement.
J'applique plusieurs recettes trouvées dans internet afin de tenir certaines classes, les attributs, les annotations et les énumérations.
Mais avec les énumérations encore problème. J'ai pu préserver enum constantes appliquer la configuration de http://proguard.sourceforge.net/manual/examples.html#enumerations:

-keepclassmembers,allowoptimization enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

À première vue, il ressemble solution de travail et constante conservé, ( Classe.getEnumConstants() ) retour correct de la liste de valeurs.
Mais j'ai eu NoSuchFieldException lorsque j'essaie de récupérer le terrain par de tout de que par son nom.

Problème viens de jaxb réflexion navigator, veuillez vérifier le code:

public Field[] getEnumConstants(Class clazz) {
    try {
        Object[] values = clazz.getEnumConstants();
        Field[] fields = new Field[values.length];
        for (int i = 0; i < values.length; i++) {
            fields[i] = clazz.getField(((Enum) values[i]).name());
        }
        return fields;
    } catch (NoSuchFieldException e) {
        //impossible
        throw new NoSuchFieldError(e.getMessage());
    }
}

Je tombe exactement dans "impossible" de la branche. Je pense que ça va être facile à comprendre pour regarder la session de débogage capture d'écran (il y a également répertorié constantes):
Comment dire proguard de garder enum constantes et les champs

Et si j'essaie d'obtenir champs, ils sont répertoriés obscurci comme a, b, c, d, e, f:
Comment dire proguard de garder enum constantes et les champs

Mon proguard configuration maintenant ressembler (bande de quelques-liste des bibliothèques et kipp particulier les classes, les champs et les méthodes sur proguard se plaindre):

-injars  core-3.15.rc5.6.jar
-outjars core-3.15.rc5.6.proguard.jar

-libraryjars <java.home>/lib/rt.jar

-libraryjars ... # Other libs listed, strip out for shortness

-printmapping core-3.15.rc5.6.proguard.map

-keep public class ru.rlh.egais.portal.backend.controller.rest.**
-keep public class ru.rlh.egais.portal.backend.integration.soap.service.**

# http://midgetontoes.com/blog/2015/06/26/tips-for-using-proguard-with-spring-framework
-optimizations !class/marking/final

-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF,META-INF/spring.*,spring/*

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# Also tried:
# -keepattributes **

-allowaccessmodification
-dontshrink
-dontoptimize
-dontusemixedcaseclassnames
-keepdirectories
-keep @org.springframework.transaction.annotation.Transactional class *
-keep @org.springframework.stereotype.Service class *
-keep @org.springframework.stereotype.Repository class *
-keep @org.springframework.stereotype.Controller class *
-keep @org.springframework.stereotype.Component class *
-keep @org.springframework.beans.factory.annotation.Autowired class *
-keep @org.springframework.web.bind.annotation.ResponseBody class *
-keep @org.springframework.web.bind.annotation.RequestMapping class *
-keep @org.springframework.stereotype.Repository class *
-keep @javax.annotation.Resource class *
-keep @org.springframework.cache.annotation.EnableCaching class *
-keep @org.springframework.context.annotation.Configuration class *

-keepclassmembers class * {
    @org.springframework.beans.factory.annotation.* *;
    @org.springframework.beans.factory.annotation.Qualifier *;
    @org.springframework.beans.factory.annotation.Value *;
    @org.springframework.beans.factory.annotation.Required *;
    @org.springframework.context.annotation.Bean *;
    @javax.annotation.PostConstruct *;
    @javax.annotation.PreDestroy *;
    @org.aspectj.lang.annotation.AfterReturning *;
    @org.aspectj.lang.annotation.Pointcut *;
    @org.aspectj.lang.annotation.AfterThrowing *;
    @org.aspectj.lang.annotation.Around *;
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

Donc, ma question comment je pouvait garder les énumérations de dissimulation? Dans les deux cas - l'utilisation de ses constantes (classe.getEnumConstants()) et des champs (classe.getFields()).

InformationsquelleAutor Hubbitus | 2015-10-17