我有一个Kotlin类,在伴侣对象中有一些变量。启用proguard后,将无法访问变量。
class Test{
......
companion object {
const val USER_NAME = "user_name"
.....
}
.....
}
Proguard规则包括:-
-keep class kotlin.** { *; }
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
<fields>;
}
-keepclassmembers class kotlin.Metadata {
public <fields>;
public <methods>;
}
-keepclassmembers class * {
static final % *;
static final java.lang.String *;
}
答案 0 :(得分:2)
在伴随对象之前使用@Keep
解决了问题
class Test{
......
@Keep companion object {
const val USER_NAME = "user_name"
.....
}
.....
}
答案 1 :(得分:1)
接受的答案使用@Keep
批注。如果这对您有用,那就太好了,但是在我们看来,这没有什么不同。
对于同一条船上的其他任何人,这是对我们有用的解决方案(添加到您的保护规则中):
-keepclassmembers class com.example.some.package.SomeClass {
public static ** Companion;
}
答案 2 :(得分:1)
经过很多努力,对我来说最有效的是:
-keep class <class>$Companion { *; }
不需要注释。