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

Unable to access companion object used in kotlin class after enabling proguard

我有一个 Kotlin class,在伴随对象中有一些变量。启用混淆器后,无法访问变量。

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 注释。如果这对你有用,那就太好了,但在我们的例子中它没有什么不同。

对于同一条船上的其他人,这是对我们有用的解决方案(添加到您的混淆器规则中):

-keepclassmembers class com.example.some.package.SomeClass {
    public static ** Companion;
}

经过多次努力,对我来说最有效的是:

 -keep class <class>$Companion { *; }

不需要注释。