如何保持实现具有注释的接口的类

时间:2017-08-23 07:47:30

标签: java proguard

我定义了一个名为@KeepAll的注释。

我有一个像

这样的界面
@KeepAll
public interface MainEntity {
    //some methods
}

我想保留所有实现此接口的类来进行混淆。这可能在ProGuard上实现吗?

注意我知道我可以将其定义为

-keep public class * implements **.MainEntity 

但我不想指定接口名称而是注释名称。

2 个答案:

答案 0 :(得分:1)

经过长时间的试错过程后,我得到了我想要的东西。这是解决方案

使用注释KeepAll;

保留类名
-keep @com.package.name.KeepAll public class **

使用注释KeepAll;

保持类和接口的类成员
-keepclassmembers @com.package.name.KeepAll class ** { public <methods>; <fields>;}

保持实现具有KeepAll注释的类的类的类成员。 (这就是我想要的)

-keepclassmembers public class * implements @com.package.name.KeepAll ** { public <methods>; <fields>;}

答案 1 :(得分:-1)

您可以告诉ProGuard使用这样的注释保留所有内容:

-keep @com.google.inject.Singleton public interface *

以上将使界面本身不受混淆。

要获得接口的实现,您可以执行以下操作:

-keep public class * implements **.MainEntity 

所以现在我很困惑你想要实现的目标。如果您只注释界面,它将不会成为ProGuard的帮助。这些类需要这个注释。

相关问题