如果字段名称以某个字符串开头,我希望ProGuard保持某些类字段不受影响。目前我只是设置要保留的所有字段,但希望对其进行优化,以保持所有公开&受保护的字段,以及仅以此字符串开头的私有字段。
这是我的pom.xml中的当前配置:
<option>-keepclassmembers class com.my.package.** { <fields>; }</option>
我尝试了以下和类似的变体:
<option>-keepclassmembers class com.my.package.** { public *; protected *; private string***; }</option>
但ProGuard会抛出错误(当我使用&#34; private *;&#34;时工作正常):
[proguard] Error: Expecting class member name before ';' in argument number 39
我猜我是不是错误地使用了通配符,或者这不能完成?我已经通过Google检查了ProGuard网站的使用/示例部分以及其他示例,我看到通常可能需要该字段的完整定义( private final String stringVariable ),但是我&#39;我不是100%肯定。
答案 0 :(得分:1)
该模式看起来像Java,但带有通配符。您可以使用以下内容:
-keepclassmembers class com.my.package.** {
public protected <fields>;
private *** string*;
}
通配符<fields>
匹配所有字段(任何类型,任何名称),在这种情况下仅限于匹配公共字段或受保护字段。
在下一行,通配符***
匹配任何类型(包括基本类型和数组类型),表达式string*
匹配任何以'string'开头的名称,在这种情况下进一步限制为私有字段。
如果有用,您可以为这两行添加其他约束,例如!static
仅匹配非静态字段。