我有一个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 *;
}
在伴随对象之前使用@Keep
解决的问题
class Test{
......
@Keep companion object {
const val USER_NAME = "user_name"
.....
}
.....
}
接受的答案使用@Keep
注释。如果这对你有效,那就太好了,但在我们的情况下,这并没有什么不同。
对于同一条船上的其他人,以下是对我们有效的解决方案(添加到您的proguard规则中(:
-keepclassmembers class com.example.some.package.SomeClass {
public static ** Companion;
}
经过多次努力,对我来说效果最好的是:
-keep class <class>$Companion { *; }
不需要注释。
我遇到了一个类似的问题,在启用proguard后,伴随对象中有一个函数没有被访问。
经过一番挣扎,@Keep
对我不起作用。我找到了解决办法。
只需将@JvmStatic
注释添加到伴随对象内部的函数即可。你可以走了。