android 密封类的Proguard规则

2w2cym1i  于 2023-04-28  发布在  Android
关注(0)|答案(1)|浏览(125)

我有一个密封类如下。

sealed class Fruits(private val category: String) {
      object Apple : Fruits("APPLE")
      class Banana : Fruits("BANANA)
    }

当minifyEnabled为true并且启用了debuggable时,它会被混淆,如下所示:

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属性可以防止香蕉类的构造函数删除?

oxiaedzo

oxiaedzo1#

您可以使用ProGuard规则中的-keepclassmembers来防止Banana类的构造函数删除。它在代码模糊处理期间保留特定的类成员,例如构造函数、方法和字段:

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

在本例中,com.yourpackage应该替换为应用程序的实际包名。
规则的<init>(...)部分告诉ProGuard保留Banana类的构造函数沿着参数。
使用此规则,Banana类的构造函数在代码模糊处理期间将不会被删除,并且您应该能够毫无问题地使用它。

相关问题