【发布时间】:2018-10-02 09:17:37
【问题描述】:
这是有问题的配置设置:-keep @interface *
这篇文章引用了这个设置:https://stackoverflow.com/a/17437740/367544
在 Proguard 手册中:https://www.guardsquare.com/en/proguard/manual/troubleshooting#notkept
但手册(或帖子)并未解释此配置设置如何或为何起作用。我认为这个配置值会保留您的应用程序中定义的所有注释。我在这里强调defined这个词,因为我想将它与used的注释进行比较。因此,如果我在我的代码中定义了一个注释,例如public @interface MyAnnotation {},那么我希望这个配置设置能够保留它。但是,如果我要在像 public class MyClass { @MyAnnotation public void run(){} } 这样的另一个类中使用我的注释,那么我会不期望此配置设置将其保留在那里。我认为要保留使用注释的位置,您需要像-keep class * { @interface <methods>; } 这样的设置。但是,我的理解显然是错误的,因为-keep @interface * 配置设置确实保留了它们使用的注释。
谁能解释为什么-keep @interface * 配置设置会影响在其他类中使用它们的注释?此外,Proguard 手册根本没有解释如何使用 @interface 关键字。这就像任何注释的通配符吗?还是像我的示例public @interface MyAnnotation {} 那样引用注释的定义?还是完全是另外一回事?
【问题讨论】:
标签: java annotations proguard shrink