为什么android sdk中的默认proguard配置使用keep *注解*
Why default proguard configurations in android sdk use keep *Annotation*
androidsdk的默认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 的商业变体)使用我上面建议的更新配置。
androidsdk的默认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 的商业变体)使用我上面建议的更新配置。