我有一组类(超过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抱怨返回类型的语法......
答案 0 :(得分:10)
您的规则几乎是正确的,只需使用***
作为返回类型,它将匹配任何类型:
-keepclassmembers class ** {
public static *** parse(***);
}
-keepclassmembers
优先于-keepclasseswithmembers
,因为它只会保留您指定的方法,而不是类本身(在您描述的情况下可能不需要)。
如果解析方法有多个参数,则应使用:
-keepclassmembers class ** {
public static *** parse(...);
}
...
将匹配 任何类型的任何个参数。
答案 1 :(得分:2)
-keepclasseswithmembers class * {
public static *** parse(***);
}