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

时间:2016-10-26 06:37:33

标签: android annotations proguard

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

-keepattributes *Annotation*

根据Proguard手册,这条线等于:

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

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

-keepattributes RuntimeVisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeVisibleTypeAnnotations,AnnotationDefault

我错过了什么吗?为什么推荐配置会保留所有这些内容?

1 个答案:

答案 0 :(得分:2)

不,你的观察是正确的,以下配置会更正确imho:

-keepattributes RuntimeVisible*Annotation*,AnnotationDefault

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

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

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