我很难让 proguard 根据他们的注释(在 Android 下)来保存东西。
我有一个注释,com.example.Keep:
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR })
public @interface Keep {
}
我有一个类,它只能通过反射构造:
public class Bar extends Foo {
@com.example.Keep
Bar(String a, String b) { super(a, b); }
//...
}
它按预期工作(类保留其构造函数,尽管使用了混淆的类名)当我的 proguard 配置包含以下内容时:
-keepattributes Signature,*Annotation*,SourceFile,LineNumberTable
-keepclassmembers class ** extends com.example.Bar {
<init>(...);
}
如果我尝试将其更改为:
-keepattributes Signature,*Annotation*,SourceFile,LineNumberTable
-keepclassmembers class ** extends com.example.Bar {
@com.example.Keep <init>(...);
}
我在自己的注释和 proguard 的 annotation.jar 注释中看到了相同的行为。我已经从 Foo 的导入中复制并粘贴了注释名称Keep
,因此我确信这不是拼写错误或不正确的导入。
谁能想到我可能会错过什么?