在proguard android中忽略警告是正确的

Posted

技术标签:

【中文标题】在proguard android中忽略警告是正确的【英文标题】:It is right thing to ignore warning in proguard android 【发布时间】:2018-03-08 13:48:19 【问题描述】:

我开始学习适用于 androidProguard。经过一番阅读,我开始尝试在我的项目中使用。当我开始生成发布版本时,我在 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 的保留规则

在 Android 应用程序中使用 MultiDex 运行 ProGuard 两次,只有第二次出现警告/注释?

使用 Android proguard 忽略外部库

更新 Android Studio 3.5 获得 proguard 警告