在Android版本中使用Kotlin反射SealedSubClasses属性

时间:2019-12-16 16:18:26

标签: android kotlin reflection

当我尝试在Kotlin中使用已归类化的类的sealedSubClasses属性时,它只能在调试中使用,而不能在发行版中使用。我猜这是ProGuard的问题,但我不知道该如何解决。我已经尝试过将所有类保留在密封类所在的模块中,但是我对此并不走运。 sealedSubClasses属性始终返回一个空列表。

3 个答案:

答案 0 :(得分:3)

找到了两种解决此问题的方法:

  1. 将规则添加到您的 proguard-rules.pro 文件:
    -keep class com.example.ClassName { *; }
    -keep class com.example.ClassName$* { *; }
  1. 使用@Keep注解:
    @Keep
    sealed class ClassName{
        @Keep
        object A : ClassName()
        @Keep
        object B : ClassName()
    }

这个对我不起作用:

-keep class kotlin.Metadata { *; }

还有一个错误 https://issuetracker.google.com/issues/169264693 可能是您的问题的一部分。

答案 1 :(得分:0)

您可以尝试

-keep class kotlin.Metadata { *; }

从类中获取缺少的属性

答案 2 :(得分:-1)

向您的proguard文件添加其他规则:

-keepnames class com.fully.qualified.ClassName* {
    *;
}

注意星号字符。