RestTemplate, Jackson and proguard



我试图让应用程序工作后混淆。我有两个简单的类:

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;
    }
}

不幸的是,在混淆之后,请求执行ApiUrlResponseData.getLinks()返回null

下面是我如何防止数据对象混淆的方法:

 -keepclasseswithmembernames class com.companyname.android.network.data.** {
       public <fields>;
       protected <fields>;
       <fields>;
       @org.codehaus.jackson.annotate.* <fields>;
       @org.codehaus.jackson.annotate.* <init>(...);
    }

我错过了什么?

选项-keepclasseswithmembernames是相当奇特的:它保留类的名称(以及它们的字段和方法),如果类具有所有指定的字段和方法。它主要用于保存JNI类和方法。

可以保留带注释的字段和方法:

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

不幸的是,您必须确保所有涉及的字段和方法都被注释了。

保留序列化类的所有字段和方法可能更容易:

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

您可以使用通配符或注释来指定它们

相关内容

  • 没有找到相关文章

最新更新