如何保持 class 实现带注解的接口
How to keep class which implement an interface with annotation
我定义了一个名为 @KeepAll
的注解。
我有这样的界面
@KeepAll
public interface MainEntity {
//some methods
}
我想避免混淆所有实现此接口的 类。这在 ProGuard 上可行吗?
注意 我知道我可以将其定义为
-keep public class * implements **.MainEntity
但我不想指定接口名称,而是指定注解名称。
您可以告诉 ProGuard 使用如下注释保留所有内容:
-keep @com.google.inject.Singleton public interface *
以上将防止界面本身混淆。
要获取接口的实现,您可以这样做:
-keep public class * implements **.MainEntity
所以现在我很困惑你想要实现什么。如果你只注释界面,它不会对 ProGuard 有帮助。 类 需要这个注解。
经过长时间的反复试验,我得到了我想要的。这是解决方案
保留 class 个带有注释 KeepAll 的名称;
-keep @com.package.name.KeepAll public class **
保留 class 的 class 成员并与注解 KeepAll 交互;
-keepclassmembers @com.package.name.KeepAll class ** { public <methods>; <fields>;}
保留 class 的 class 成员,它实现了具有 KeepAll 注释的 class。 (这就是我想要的)
-keepclassmembers public class * implements @com.package.name.KeepAll ** { public <methods>; <fields>;}
我定义了一个名为 @KeepAll
的注解。
我有这样的界面
@KeepAll
public interface MainEntity {
//some methods
}
我想避免混淆所有实现此接口的 类。这在 ProGuard 上可行吗?
注意 我知道我可以将其定义为
-keep public class * implements **.MainEntity
但我不想指定接口名称,而是指定注解名称。
您可以告诉 ProGuard 使用如下注释保留所有内容:
-keep @com.google.inject.Singleton public interface *
以上将防止界面本身混淆。
要获取接口的实现,您可以这样做:
-keep public class * implements **.MainEntity
所以现在我很困惑你想要实现什么。如果你只注释界面,它不会对 ProGuard 有帮助。 类 需要这个注解。
经过长时间的反复试验,我得到了我想要的。这是解决方案
保留 class 个带有注释 KeepAll 的名称;
-keep @com.package.name.KeepAll public class **
保留 class 的 class 成员并与注解 KeepAll 交互;
-keepclassmembers @com.package.name.KeepAll class ** { public <methods>; <fields>;}
保留 class 的 class 成员,它实现了具有 KeepAll 注释的 class。 (这就是我想要的)
-keepclassmembers public class * implements @com.package.name.KeepAll ** { public <methods>; <fields>;}