在proguard android中忽略警告是正确的
Posted
技术标签:
【中文标题】在proguard android中忽略警告是正确的【英文标题】:It is right thing to ignore warning in proguard android 【发布时间】:2018-03-08 13:48:19 【问题描述】:我开始学习适用于 android 的 Proguard。经过一番阅读,我开始尝试在我的项目中使用。当我开始生成发布版本时,我在 android studio 终端中看到很多警告和注释。我知道这完全取决于我的代码库和我使用的第三方库。
我的问题
我不明白这些警告的意思? 但是构建肯定会失败,并且无法生成 apk 文件。
令人惊讶的是,添加 -dontwarn packagename*
会忽略这些警告,但再次不确定这样做是否安全。 通过添加 -dontwarn
来忽略这些警告总是可行的吗?
-dontwarn [class_filter]
指定根本不警告未解决的引用和其他重要问题。可选过滤器是 一个正则表达式; ProGuard 不打印关于类的警告 具有匹配的名称。忽视警告可能很危险。例如, 如果确实需要未解决的类或类成员 处理,处理后的代码将无法正常运行。 只使用 如果您知道自己在做什么,请选择此选项!
当然,在这一点上,我真的不知道我在做什么。如果您能帮助我理解,我将不胜感激;-)。
来自我当前项目的 Retrofit2 警告
警告:retrofit2.OkHttpCall:找不到引用的类 javax.annotation.concurrent.GuardedBy
警告:retrofit2.OkHttpCall:找不到引用的类 javax.annotation.concurrent.GuardedBy
警告:retrofit2.OkHttpCall:找不到引用的类 javax.annotation.concurrent.GuardedBy
只需在 proguard-rules.pro
中添加此行即可关闭上述警告-dontwarn retrofit2.**
【问题讨论】:
你到底想要什么?,建议或询问一些事情,请清除它。 - 我不明白这些警告想说什么? - 只需添加-dontwarn
就可以简单地忽略这些警告吗?
【参考方案1】:
所以基本上 Proguard 会映射您的代码或执行代码混淆、收缩、优化会在执行同样,有时它会发现许多在 import 语句或其他地方使用的类,但这些类实际上并不存在于包中,因此它会生成警告,因为 Proguard 无法获取某些类的引用。不过,优化是使用 Java 字节码进行的,并且由于 Android 运行在从 Java 字节码转换而来的 Dalvik 字节码上,因此某些优化效果不会那么好。所以你应该小心那里。
所以在 dont warn 中,我们只是忽略这些文件以通过 proguard 操作。 希望这对您来说是足够的信息。
【讨论】:
感谢 Nikhil,如何声明已声明但不存在的类? Proguard 删除了那些缺失的课程?忽略 proguard 中的所有类型的警告是安全的。 ? 就像在 libs 中声明的某些类,您使用的 jar 文件在 proguard 无法链接或找到引用的情况下,*是*忽略这些类是正确的,因为应用 proguard 的主要用途是安全性我们的代码,但如果 proguard 无法找到它们,那么没问题。以上是关于在proguard android中忽略警告是正确的的主要内容,如果未能解决你的问题,请参考以下文章
Proguard 问题“警告:忽略匿名内部类的 InnerClasses 属性”
Android Gradle Plugin 2.2.0 ProGuard 开始保留内部类
Proguard 导致 100 个“找不到引用的类”警告,忽略 springframework 和 jackson 的保留规则