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

Mik*_*ren 7 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(...) { ... }
   ...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试配置ProGuard来混淆这些类以及parse(...)方法之外的所有方法和字段.基本上,我想混淆类名,所有静态和非静态方法,以及类字段.

我试过用:

-keepclassmembers class SomeType {
  public static SomeType parse(***);
}
Run Code Online (Sandbox Code Playgroud)

并且工作得很好SomeType,但是我不想为我的50个课程中的每个课程编写这个规则...所以我怎么能概括它呢?

我试过了:

-keepclassmembers class ** {
  public static * parse(***);
}
Run Code Online (Sandbox Code Playgroud)

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

T. *_*art 12

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

-keepclassmembers class ** {
   public static *** parse(***);
}
Run Code Online (Sandbox Code Playgroud)

也是-keepclassmembers首选,-keepclasseswithmembers因为它只保留您指定的方法而不是类本身(在您描述的情况下可能不需要).

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

-keepclassmembers class ** {
   public static *** parse(...);
}
Run Code Online (Sandbox Code Playgroud)

...将匹配任何数量的参数任何类型.