为什么android sdk中的proguard默认配置使用keep *Annotation ?



android sdk的默认proguard配置中有一行:

-keepattributes *Annotation*

根据Proguard手册,这一行等于:

-keepattributes RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations,RuntimeVisibleTypeAnnotations,RuntimeInvisibleTypeAnnotations,AnnotationDefault

在我看来,也许下面的配置就足够了:

-keepattributes RuntimeVisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeVisibleTypeAnnotations,AnnotationDefault

我错过了什么吗?为什么推荐的配置保留了所有这些东西?

不,你的观察是正确的,下面的配置将是更正确的:

-keepattributes RuntimeVisible*Annotation*,AnnotationDefault

大多数人可能不关心运行时可见和不可见注释之间的细微差别,但是没有特别的理由保留运行时不可见注释。

编辑:以上内容仅适用于Android应用程序。如果你正在构建一个Android库,你应该坚持-keepattributes *Annotation*.

顺便说一句。DexGuard (ProGuard的商业版本)使用我上面建议的更新配置

最新更新