告诉 Proguard 在方法上保留注解

Tell Proguard to keep annotation on methods

我正在使用我自己的注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Loggable { }

并使用 Proguard 进行混淆。我使用 -keepattributes *Annotation* 在 Proguard 配置中保留注释。

在运行时,当我使用 someClass.getAnnotation(Loggable.class) 带注释的 class 中检索注释时,一切正常 - 我检索了我的注释的非空实例.

但是,当我想将相同的方法应用于某些 class 的 注释方法 时,我从 someMethod.getAnnotation(Loggable.class).[=14= 检索空值]

Proguard 是否从方法中删除注释?我如何告诉它不要这样做?

我正在使用 Proguard 4.7。

您需要使用keepclassmembers参数:

-keepclassmembers class ** {
  @com.yourpackage.Loggable public *;
}