首页 > 解决方案 > 在签名发布 apk 上忽略 fun toString()

问题描述

我正在使用 android:entries 为微调器使用数据绑定,仅在调试时工作但在发布 apk 时失败,覆盖 fun toString() 被忽略

我在绑定之前使用 for(i in response.body) 并且它有效,我只是想知道是否有更好的解决方案以及导致此问题的问题是什么

<!--layout-->
<data>
    <import type="com.myproject.model.Group"/>
    <import type="java.util.List"/>
    <variable
        name="groups"
        type="List&lt;Group>"/>
</data>
<Spinner
    android:id="@+id/spinnerGroup"
    android:entries="@{groups}"/>

代码

//retrofit callback
override fun onResponse(call: Call<List<Group>>, response: Response<List<Group>>) {
    for(i in response.body){} //temporary solution
    binding.groups=response.body
}

//model

class Group {

    @SerializedName("group")
    @Expose
    val group: String? = null

    override fun toString(): String {
        return group?:""
    }
}

微调器上的预期条目

Group A
Group B
Group C

实际结果

{group=Group A}
{group=Group B}
{group=Group C}

标签: androidkotlingsonretrofitandroid-databinding

解决方案


在我看来,这与Proguard配置有关

我建议在Group类的开头使用data关键字,并在类定义的上方添加@Keep注释

@Keep
data class Group

避免此问题的另一种方法是在 Proguard 文件中添加新规则

-keep class com.myproject.model.Group.** { *; }

推荐阅读