Question

J'essaie de faire fonctionner l'application après une obscurcissement.J'ai deux cours simples :

public class ApiUrlResponseData
{

    @JsonProperty( "@links" )
    List<Link> links;

    public List<Link> getLinks()
    {
        return links;
    }
}

public class Link 
{
    @JsonProperty( "url" )
    String url;

    @JsonProperty( "name" )
    String name;

    @JsonProperty( "mobile" )
    Boolean mobile;

    public Link()
    {
    }

    public Link( String url, String name, Boolean mobile )
    {
        this.url = url;
        this.name = name;
        this.mobile = mobile;
    }

    public String getUrl()
    {
        return url;
    }

    public String getName()
    {
        return name;
    }

    public Boolean isMobile()
    {
        return mobile;
    }
}

Malheureusement, après l'obscurcissement et l'exécution de la demande ApiUrlResponseData.getLinks() Retour null.

Voici comment j'essaie d'empêcher l'obscurcissement des objets de données :

 -keepclasseswithmembernames class com.companyname.android.network.data.** {
       public <fields>;
       protected <fields>;
       <fields>;

       @org.codehaus.jackson.annotate.* <fields>;
       @org.codehaus.jackson.annotate.* <init>(...);
    }

Qu'est-ce que je rate?

Était-ce utile?

La solution

Les options -keepclasseswithmembernames c'est assez exotique :il conserve les noms des classes (et de leurs champs et méthodes), si les classes ont tous les champs et méthodes spécifiés.Il est surtout utile pour préserver les classes et méthodes JNI.

Vous pouvez conserver les champs et méthodes annotés :

-keepclassmembers class * {
    @org.codehaus.jackson.annotate.* *;
}

Malheureusement, vous devez alors vous assurer que tous les champs et méthodes impliqués sont annotés.

Il peut être plus facile de conserver tous les champs et méthodes des classes sérialisées comme celles-ci :

-keepclassmembers class com.example.ApiUrlResponseData,
                        com.example.Link {
    *;
}

Vous pouvez utiliser des caractères génériques ou également des annotations pour les spécifier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top