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

2024-01-06

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么android sdk中默认的proguard配置使用keep *注释* 的相关文章

随机推荐

  • Java的隐藏特性

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 看完之后C 的隐藏特性 https stackoverflow com questions 9
  • JavaScript 在 Function 对象上使用 toString 来读取文本内容

    对下面的函数调用 toString 会在浏览器中返回不同的字符串 我理解这是因为 ECMA 262 15 3 4 2 为每个供应商留下了回旋余地 除了所有语法之外 Chrome 还会返回注释 遗憾的是 Firefox 3 6 忽略了这些注释
  • 如何将 Git 中一个分支的特定提交合并到另一个分支?

    I have BranchA提前 113 次提交BranchB 但我只想要最后 10 个左右的提交BranchA并入BranchB 有没有办法做到这一点 The git cherry pick
  • 该图像无法显示,因为它包含错误

    为什么这段代码不起作用
  • React Native Detox 模拟文件

    请有人告诉我模拟文件如何反应本机排毒测试 我关注本文 https github com wix Detox blob master docs Guide Mocking md 我正在使用react native版本0 57 7和detox
  • 从 JRuby 转换 Java 对象

    我正在使用 JRuby 中的 Java 库 我正在从文件中读取一个对象 并且需要将其作为不同的对象类型传递给第二个构造函数 hmm model ObjectInputStream new FileInputStream new LINGPI
  • Bootstrap datetimepicker 禁用分钟

    我正在使用 v4https github com Eonasdan bootstrap datetimepicker https github com Eonasdan bootstrap datetimepicker 现在我试图禁用时间选
  • mongoid 更新数组中的元素

    我正在将 mongoid 3 1 与 Ruby 1 9 3 结合使用 并尝试更新数组中的值 我可以在 mongodb 的 CLI 中成功执行以下命令 但似乎找不到适用于 mongoid 的解决方案 翻译 user update activi
  • 是否存在与堆内存分配相关的内存开销(例如堆中的标记)?

    特别是在 Windows 上使用最新的 Visual Studio C 编译器来考虑 C 我想知道heap执行 假设我使用的是发布编译器 并且我不关心内存碎片 打包问题 是否存在与在heap 如果是这样 每个分配大约有多少字节 会不会更大一
  • λProlog 拒绝假设推理查询?

    我怀疑 Prolog 的主要实现 teyjus 可能有点废弃软件 但 Prolog 是一个令人着迷的 Prolog 它应该让你使用高阶逻辑 假设推理和其他东西 这就是为什么我试图用它 文件 example sig sig example k
  • 使用 NSAlert 处理按下哪个按钮的正确方法是什么

    我已经添加了两个按钮NSAlert对象 目前按钮一的返回码是1001 并且按钮默认为1000 我需要有效地确定按下给定警报中的哪个按钮 而无需使用幻数 否则会变得混乱 void showErrorMessage NSString error
  • Cloudfoundry 是否支持需要更大内存的应用程序?

    我一直在使用 grails 开发一个网站并使用 Cloudfoundry 对其进行演示 Grails 和 Cloudfoundry 太棒了 在 STS 中 grails 插件和工具的支持下 它们易于使用 我的应用程序使用 MySQL Mon
  • 用 Javascript 对象替换窗口或文档对象

    有没有办法替换 窗口 或 文档 对象 我基本上想要的是提供某种 JavaScript 代理 我想防止用户在页面上获取 一些 只有一些 这很重要 DOM 元素 我所说的 用户 是指任何第三个小馅饼脚本 我可以做这个 document getE
  • VBA 正则表达式中的后向查找?

    有没有办法在 VBA 正则表达式中进行负向和正向向后查找 如果字符串以 A 开头 我不想匹配 所以我目前正在模式的开头执行 A 然后删除 match 0 的第一个字符 显然不是最好的方法 我正在使用 regExp 对象 VBA 提供前瞻 正
  • 计算移动设备实际行驶的距离[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想计算移动设备 iOS 和 Android 实际行驶的距离 我知道通过谷歌地图API 我们可以找到2个坐标之间的最佳路线距离 但我想
  • 如何对给定点之间的直线的所有像素位置进行采样?

    我正在做一个项目 其中包括画一条线 但是 最重要的是我需要在每个 X 位置上获取 Y 位置 因此 对于每个 X 我都需要一个 Y 当我缓慢绘制时 绘制一条线并获取位置效果很好 但是当我更快地移动光标时 即使绘制了线 也不会保存每个 X 的位
  • Python 中的凯撒密码函数

    我正在尝试在 Python 中创建一个简单的凯撒密码函数 该函数根据用户的输入移动字母 并在末尾创建一个最终的新字符串 唯一的问题是 最终的密文仅显示最后一个移位的字符 而不是包含所有移位字符的整个字符串 这是我的代码 plainText
  • 使用 jest 模拟 aws-sdk S3#putObject 实例方法

    对于包含以下内容的源代码 const S3 require aws sdk s3 clients const s3 new S3 s3 putObject params callback 我添加了以下模拟基于本文 https faceboo
  • 是否可以在 php 中更改 $_['http_referer'] ? [复制]

    这个问题在这里已经有答案了 可能的重复 PHP 引用重定向脚本 https stackoverflow com questions 857427 php referer redirect script 例如 我希望制作改变浏览器 http
  • 为什么android sdk中默认的proguard配置使用keep *注释*

    android sdk默认的proguard配置中有一行 keepattributes Annotation 根据 Proguard 手册 这一行等于 keepattributes RuntimeVisibleAnnotations Run