使用 ProGuard,使用通配符保留 class 字段
Using ProGuard, keep class fields with wildcard
如果字段名称以特定字符串开头,我希望某些 class 字段不被 ProGuard 触及。目前我只是设置要保留的所有字段,但想改进它以保留 all public 和受保护的字段,并且只保留以此字符串开头的私有字段.
这是我的当前配置 pom.xml:
<option>-keepclassmembers class com.my.package.** { <fields>; }</option>
我尝试了以下和类似的变体:
<option>-keepclassmembers class com.my.package.** { public *; protected *; private string***; }</option>
但是 ProGuard 抛出一个错误(当我只使用 "private *;" 时工作正常):
[proguard] Error: Expecting class member name before ';' in argument number 39
我猜是我使用的通配符不正确,或者这无法完成?我已经通过 Google 检查了 ProGuard 站点的 usage/examples 部分和其他示例,我发现通常可能需要该字段的完整定义(private final String stringVariable), 但我不是 100% 确定。
该模式看起来像 Java,但带有通配符。您可以使用以下内容:
-keepclassmembers class com.my.package.** {
public protected <fields>;
private *** string*;
}
通配符 <fields>
匹配所有字段(任何类型,任何名称),在本例中限制为仅匹配 public 或受保护的字段。
下一行,通配符***
匹配任何类型(包括原始类型和数组类型),表达式string*
匹配任何以'string'开头的名称,在本例中进一步限制在私人领域。
如果有用,您可以向这两行添加其他约束,例如 !static
以仅匹配非静态字段。
如果字段名称以特定字符串开头,我希望某些 class 字段不被 ProGuard 触及。目前我只是设置要保留的所有字段,但想改进它以保留 all public 和受保护的字段,并且只保留以此字符串开头的私有字段.
这是我的当前配置 pom.xml:
<option>-keepclassmembers class com.my.package.** { <fields>; }</option>
我尝试了以下和类似的变体:
<option>-keepclassmembers class com.my.package.** { public *; protected *; private string***; }</option>
但是 ProGuard 抛出一个错误(当我只使用 "private *;" 时工作正常):
[proguard] Error: Expecting class member name before ';' in argument number 39
我猜是我使用的通配符不正确,或者这无法完成?我已经通过 Google 检查了 ProGuard 站点的 usage/examples 部分和其他示例,我发现通常可能需要该字段的完整定义(private final String stringVariable), 但我不是 100% 确定。
该模式看起来像 Java,但带有通配符。您可以使用以下内容:
-keepclassmembers class com.my.package.** {
public protected <fields>;
private *** string*;
}
通配符 <fields>
匹配所有字段(任何类型,任何名称),在本例中限制为仅匹配 public 或受保护的字段。
下一行,通配符***
匹配任何类型(包括原始类型和数组类型),表达式string*
匹配任何以'string'开头的名称,在本例中进一步限制在私人领域。
如果有用,您可以向这两行添加其他约束,例如 !static
以仅匹配非静态字段。