启用proguard后,无法访问kotlin类中使用的伴随对象



我有一个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注释添加到伴随对象内部的函数即可。你可以走了。

最新更新