我定义了一个名为@KeepAll
的注解。
我有一个类似于以下代码的接口:
@KeepAll
public interface MainEntity {
//some methods
}
我希望能够防止所有实现此接口的类被混淆。在ProGuard上是否有可能实现?
注意:我知道可以将其定义为
-keep public class * implements **.MainEntity
但我不想指定接口名称,而是注释名称。
经过长时间的试错,我终于得到了想要的结果。以下是解决方案:
在注释 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>;}
您可以使用以下注释告诉ProGuard保留所有内容:
-keep @com.google.inject.Singleton public interface *
以上代码将保留接口本身不被混淆。
要获取接口的实现,您可以执行以下操作:
-keep public class * implements **.MainEntity
现在我有点困惑你想要实现什么。如果你只是注释接口,这对ProGuard没有帮助。类需要这个注释。
implements
上使用keep
,或者在注解上使用keep
。然而,这些类必须被注解,而不是接口。 - Nico