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

标签 android annotations proguard

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 的商业变体)使用我上面建议的更新配置。

关于android - 为什么android sdk中默认的proguard配置使用keep *注释*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40255308/

相关文章:

Android Seekbar 作为对话框

android studio 3.5 图像资源启动器图标(仅限旧版本)形状无不工作

android - Proguard:保留动态声明的方法

debugging - 在启用 Proguard 的情况下在 Android Studio 中运行调试器

android - Proguard - 不要混淆 Kotlin 数据类

java - 双边过滤错误,断言失败 ((src.type() == CV_8UC1 || src.type() == CV_8UC3) && src.data != dst.data)

我的新模块中没有生成 Android 数据绑定(bind)类

java - HashMap 到 Java 类对象

java - 在 hibernate 中执行查询时,我应该如何解决异常 "Unable to resolve path"?

java - @Service 是否保证 Spring 中的唯一性?