在 Android 发布版本中使用 Kotlin 反射sealedSubClasses 属性

sun*_*son 7 reflection android kotlin

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

Vik*_*nin 10

找到了两种方法来解决这个问题:

  1. 将规则添加到您的 proguard-rules.pro 文件:
    -keep class com.example.ClassName { *; }
    -保留类 com.example.ClassName$* { *; }
  1. 使用@Keep注解:
    @保持
    密封类 ClassName{
        @保持
        对象 A : 类名()
        @保持
        对象 B : 类名()
    }

这对我不起作用:

-keep 类 kotlin.Metadata { *; }

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


asc*_*ney -3

在您的 proguard 文件中添加一条附加规则:

-keepnames class com.fully.qualified.ClassName* {
    *;
}
Run Code Online (Sandbox Code Playgroud)

注意星号字符。