启用 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 { *; }
不需要注释。
我有一个 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 { *; }
不需要注释。