启用缩小时 JsonProperty 不起作用

Ali*_*tfi 3 android proguard jackson kotlin

我有以下课程

class CodeRequest(@JsonProperty("phone") val phoneNumber: String)
Run Code Online (Sandbox Code Playgroud)

当我使用此类的对象作为主体发送请求(使用改造)时(当未启用缩小时)一切正常,请求将以这种形式发送 {"phone": "123"}

但是使用以下内容启用缩小proguard-rules.pro将导致{"phoneNumber": "123"}请求正文。

# Jackson
-keep class com.fasterxml.jackson.databind.ObjectMapper {
    public <methods>;
    protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
    public ** writeValueAsString(**);
}
-keep @com.fasterxml.jackson.annotation.* class * { *; }
-keep @com.fasterxml.jackson.annotation.** class * { *; }
-keep class com.fasterxml.** { *; }
-keepattributes *Annotation*,EnclosingMethod,Signature,Exceptions,InnerClasses
-keep class * {
    @com.fasterxml.jackson.annotation.* *;
}
-keep class * { @com.fasterxml.jackson.annotation.JsonProperty *;}

# Application classes that will be serialized/deserialized over Jackson
-keepclassmembers class my.application.data.models.** { *; }
-keepclassmembers class my.application.domain.network.rest.** { *; }
Run Code Online (Sandbox Code Playgroud)

这里缺少什么?

谢谢你。

Ali*_*tfi 5

发布问题几分钟后找到解决方案。问题不在于也不proguardjackson,而是 Kotlin 删除了存储在kotlin.Metadata. 添加以下规则以 proguard 修复了该问题:

-keep class kotlin.Metadata { *; }
Run Code Online (Sandbox Code Playgroud)