如何配置Proguard以保留返回时间不同的静态方法

12

我有一组超过50个类,其中包含几个名为parse()的静态方法,该方法返回该类的一个实例。以下是这些类中的一个示例:

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来混淆这些类及其所有方法和字段,但要排除parse(...) 方法。基本上,我想混淆类名、所有静态和非静态方法以及类字段。

我尝试使用:

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

对于SomeType,这个方法运行得很好,但我不想为我的50个类中的每一个都编写此规则... 那么我该如何将其概括?

我尝试过:

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

但是ProGuard抱怨返回类型的语法有问题...

2个回答

20

你的规则几乎正确,只需要使用***作为返回类型,这将匹配任何类型:

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

同时,-keepclassmembers-keepclasseswithmembers 更受青睐,因为它只会保留您指定的方法而不是类本身(在您的情况下可能不需要描述该类)。

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

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

...将匹配任意数量和任意类型的参数。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接