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

时间:2016-07-25 18:04:54

标签: java android proguard android-proguard

我有一组类(超过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 个答案:

答案 0 :(得分:10)

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

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

-keepclassmembers优先于-keepclasseswithmembers,因为它只会保留您指定的方法,而不是类本身(在您描述的情况下可能不需要)。

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

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

...将匹配 任何类型的任何个参数。

答案 1 :(得分:2)

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