如何配置 Proguard 以保持不同 return 次的静态方法

How to configure Proguard to keep static methods with different return times

我有一组 classes(超过 50 个),其中包含一些称为 parse() 的静态方法,return 是 class 的一个实例。这是其中一个 classes:

的例子
class SomeType {

   // Parse methods
   public static SomeType parse(String text) { ... }
   public static SomeType parse(Object obj) { ... }
   ...

   // Other methods
   public void static somethingStatic(...) { ... }
   public void somethingNotStatic(...) { ... }
   ...
}

我正在尝试配置 ProGuard 以混淆这些 classes 及其所有方法和字段 except parse(...) 方法。基本上,我想混淆 class 名称、所有静态和非静态方法以及 class 字段。

我试过使用:

-keepclassmembers class SomeType {
  public static SomeType parse(***);
}

这对 SomeType 来说效果很好,但我不想为我的 50 个 class 中的每一个都写这个规则...那么我该如何概括它呢?

我试过了:

-keepclassmembers class ** {
  public static * parse(***);
}

但是 ProGuard 抱怨 return 类型的语法...

-keepclasseswithmembers class * {
  public static *** parse(***);
}

您的规则几乎是正确的,只需使用 *** 作为 return 类型,它将匹配 any 类型:

-keepclassmembers class ** {
   public static *** parse(***);
}

此外 -keepclassmembers-keepclasseswithmembers 更受欢迎,因为它只会保留您指定的方法而不是 class 本身(您描述的情况可能不需要) .

如果解析方法有多个参数,您应该使用:

-keepclassmembers class ** {
   public static *** parse(...);
}

... 将匹配 anyany 类型的参数。