恩赐的Kotlin Proguard规则?

时间:2017-09-07 18:27:01

标签: enums kotlin proguard

嗨,有人可以告诉我,如果Kotlin类需要枚举的特定规则吗?简单的例子是

data class Passenger(
    var type: Type?,
    var id: Int,
    var age: Int
) {

companion object {

    const val AGE_NOT_SET = -1
}

enum class Type {
    ADULT, CHILD, INFANT
}

constructor() : this(null, 0, 0)
}

如果对象初始化为Passenger(CHILD, 123456, 4)转换为Json,稍后解析回POJO将导致Passenger(null, 0,0)

我确实

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

在我的proguard规则中适用于Java中的枚举,但由于某种原因它无法用于Kotlin

3 个答案:

答案 0 :(得分:0)

-keep class Type {
    public *;
}

这对我有用。如果对您不起作用,请尝试将枚举移动到单独的文件。

答案 1 :(得分:0)

您似乎需要保留所有公共枚举类成员,才能避免此错误。这对我有用:

-keepclassmembers enum * {
    public *;
}

答案 2 :(得分:0)

您可以尝试在“ proguard-rules.pro”文件中添加以下行。确保用您自己的包名称替换“ package.name”部分。

-keepnames class package.name.Type