1

ProGuard在这里定义了它的“保留”语法。

[@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 { *; } The 1st*表示任何来自 this part:的内容[!]public|final|abstract|@ ...],而
2nd*表示来自 this part:的任何内容[!]interface|class|enum

更深入一点,我正在尝试动态生成 ProGuard 参数,但我不知道my.package.MySomething是 an abstract classorpublic enum还是其他任何东西。

有没有办法,ProGuard 中的一个选项可以帮助我完成这个?

4

1 回答 1

2

配置

-keep class my.package.MySomething { *; }

做你想做的事。如果您想进一步限制匹配项(例如公共;或接口而不是类),您只需要添加访问修饰符。

于 2012-07-14T22:39:51.590 回答