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

时间:2018-11-28 13:56:59

标签: kotlin proguard

我有一个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 *;    
}    

3 个答案:

答案 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 { *; }

不需要注释。