使用ProGuard,使用通配符保留类字段

时间:2017-04-30 23:32:06

标签: java maven proguard

如果字段名称以某个字符串开头,我希望ProGuard保持某些类字段不受影响。目前我只是设置要保留的所有字段,但希望对其进行优化,以保持所有公开&受保护的字段,以及仅以此字符串开头的私有字段。

这是我的pom.xml中的当前配置:

<option>-keepclassmembers class com.my.package.** { &lt;fields&gt;; }</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%肯定。

1 个答案:

答案 0 :(得分:1)

该模式看起来像Java,但带有通配符。您可以使用以下内容:

-keepclassmembers class com.my.package.** {
    public protected <fields>;
    private *** string*;
}

通配符<fields>匹配所有字段(任何类型,任何名称),在这种情况下仅限于匹配公共字段或受保护字段。

在下一行,通配符***匹配任何类型(包括基本类型和数组类型),表达式string*匹配任何以'string'开头的名称,在这种情况下进一步限制为私有字段。

如果有用,您可以为这两行添加其他约束,例如!static仅匹配非静态字段。