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.MySomethingabstract class 还是 public enum 或其他任何东西。

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

【问题讨论】:

【参考方案1】:

配置

-keep class my.package.MySomething  *; 

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

【讨论】:

以上是关于ProGuard 的“保持”论点的概括的主要内容,如果未能解决你的问题,请参考以下文章

启用 PROGUARD - Xamarin.Android

Java 混淆 - ProGuard/yGuard/其他? [关闭]

在 proguard 之后,点击在发布 apk 中不起作用

Android之代码混淆

Proguard 混淆时保持类“实现”

在混淆时我是不是需要在 proguard 规则中“保持” Parcelable