ProGuard 的“保持”论点的概括
Posted
技术标签:
【中文标题】ProGuard 的“保持”论点的概括【英文标题】:Generalization in ProGuard's "keep" arguments 【发布时间】:2012-07-12 02:48:45 【问题描述】:ProGuard 定义了它的“保留”语法here。
[@annotationtype] [[!]public|final|abstract|@ ...] [!]interface|class|enum classname
[extends|implements [@annotationtype] classname]
[
[@annotationtype] [[!]public|private|protected|static|volatile|transient ...] <fields> |
(fieldtype fieldname);
[@annotationtype] [[!]public|private|protected|static|synchronized|native|abstract|strictfp ...] <methods> |
<init>(argumenttype,...) |
classname(argumenttype,...) |
(returntype methodname(argumenttype,...));
[@annotationtype] [[!]public|private|protected|static ... ] *;
...
]
是否可以继续使用泛化修饰符和类型?
例如-keep * * my.package.MySomething *;
第一个*
将意味着这部分的任何内容:[!]public|final|abstract|@ ...]
,并且
第二个*
将意味着这部分的任何内容:[!]interface|class|enum
。
更深入一点,我正在尝试动态生成 ProGuard 参数,但我不知道 my.package.MySomething
是 abstract class
还是 public enum
或其他任何东西。
有没有办法,ProGuard 中的一个选项可以帮助我完成这个?
【问题讨论】:
【参考方案1】:配置
-keep class my.package.MySomething *;
做你想做的事。如果您想进一步限制匹配项(例如公共;或接口而不是类),您只需添加访问修饰符。
【讨论】:
以上是关于ProGuard 的“保持”论点的概括的主要内容,如果未能解决你的问题,请参考以下文章