【问题标题】:Why default proguard configurations in android sdk use keep *Annotation*为什么 android sdk 中的默认 proguard 配置使用 keep *Annotation*
【发布时间】:2016-10-26 06:37:32
【问题描述】:

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

-keepattributes *Annotation*

根据 Proguard 手册,此行等于:

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

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

-keepattributes RuntimeVisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeVisibleTypeAnnotations,AnnotationDefault

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

【问题讨论】:

    标签: android annotations proguard


    【解决方案1】:

    不,您的观察是正确的,恕我直言,以下配置会更正确:

    -keepattributes RuntimeVisible*Annotation*,AnnotationDefault
    

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

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

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

    【讨论】:

    • 仅适用于 Android 应用程序。如果你正在构建一个 Android 库,你应该坚持 -keepattributes *Annotation* -- 谢谢你指出这一点!
    猜你喜欢
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2018-10-02
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多