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

Sur*_*wal 7 proguard kotlin

我有一个 Kotlin 类,在伴随对象中有一些变量。启用 proguard 后,变量不会被访问。

class Test{    
    ......    
    companion object {    
        const val USER_NAME = "user_name"    
        .....    
  }    
  .....    
}  
Run Code Online (Sandbox Code Playgroud)

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 *;    
}    
Run Code Online (Sandbox Code Playgroud)

Sur*_*wal 8

@Keep在伴随对象之前使用解决的问题

class Test{    
    ......    
    @Keep companion object {    
        const val USER_NAME = "user_name"    
        .....    
  }    
  .....    
}  
Run Code Online (Sandbox Code Playgroud)


Mar*_*ros 7

经过多次斗争后,对我来说最有效的事情是:

 -keep class <class>$Companion { *; }
Run Code Online (Sandbox Code Playgroud)

无需注释。


jma*_*777 6

接受的答案使用@Keep注释。如果这对您有用,那就太好了,但在我们的情况下,这并没有什么不同。

对于同一条船上的其他任何人,以下是对我们有用的解决方案(添加到您的 proguard 规则中):

-keepclassmembers class com.example.some.package.SomeClass {
    public static ** Companion;
}
Run Code Online (Sandbox Code Playgroud)