密封类的 Proguard 规则

问题描述 投票:0回答:2

我有一个密封课程如下。

    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 类的构造函数删除?

android kotlin proguard sealed-class android-obfuscation
2个回答
1
投票

您可以使用 ProGuard 规则中的

-keepclassmembers
来防止 Banana 类的构造函数被删除。它在代码混淆期间保留特定的类成员,例如构造函数、方法和字段:

-keepclassmembers class com.yourpackage.Fruits$Banana {
    <init>(...);
}

在此示例中,

com.yourpackage
应替换为应用程序的实际包名称。

规则的

<init>(...)
部分告诉 ProGuard 保留 Banana 类的构造函数及其参数。

有了这个规则,Banana类的构造函数在代码混淆过程中不会被删除,你应该能够毫无问题地使用它。


0
投票

这对我不起作用,通过在密封类继承的每个级别使用@Keep注释解决了问题,包括最低级别有问题的数据对象。

© www.soinside.com 2019 - 2024. All rights reserved.