我有一个密封课程如下。
sealed class Fruits(private val category: String) {
object Apple : Fruits("APPLE")
class Banana : Fruits("BANANA)
}
当 minifyEnabled 为 true 且可调试启用时,它会被混淆,如下所示:
public static abstract class Fruits {
private Fruits(String param1String) {
this.category = param1String;
}
public static final class Banana extends Fruits {
static {
}
}
public static final class Apple extends Fruits {
public static final Apple INSTANCE = new Apple();
private Apple() {
super("APPLE", null);
}
}
}
我们是否有任何 proguard 属性可以防止 Banana 类的构造函数删除?
您可以使用 ProGuard 规则中的
-keepclassmembers
来防止 Banana 类的构造函数被删除。它在代码混淆期间保留特定的类成员,例如构造函数、方法和字段:
-keepclassmembers class com.yourpackage.Fruits$Banana {
<init>(...);
}
在此示例中,
com.yourpackage
应替换为应用程序的实际包名称。
规则的
<init>(...)
部分告诉 ProGuard 保留 Banana 类的构造函数及其参数。
有了这个规则,Banana类的构造函数在代码混淆过程中不会被删除,你应该能够毫无问题地使用它。
这对我不起作用,通过在密封类继承的每个级别使用@Keep注释解决了问题,包括最低级别有问题的数据对象。