"-keep class"和"-dontwarn"有什么区别?

14

嘿,我是新手使用ProGuard,我使用它来保护我的代码免受反向工程,但是当我构建已签名的apk时启用ProGuard后遇到了很多错误。我在谷歌上搜索了我的问题,找到了一些答案,说在出现错误消息的类中使用-dontwarn,但是看了ProGuard文档之后,它说:

如果您不想过滤掉有问题的类,可以尝试使用-ignorewarnings选项,甚至是-dontwarn选项。只有真正知道自己在做什么时才使用这些选项

而我并不知道我在做什么,这是我的proguard-rules.pro文件。

-dontwarn okio.**
-dontwarn org.apache.**
-dontwarn com.appodeal.**
-dontwarn com.parse.**
-dontwarn com.squareup.**

我看到有些答案建议使用-keep class,那么能否有人解释一下吗?


1
保留类意味着你告诉ProGuard:不要触碰这个类,dontwarn的意思是,无论发生什么问题...都不要告诉我 :) - Yazan
2个回答

15

这是否意味着为同一类编写忽略和保留类更安全。例如:-dontwarn okio.** -keep class okio.** - Emil

6
-dontwarn

指定不会警告任何有关未解决的引用和其他重要问题。可选过滤器是一个正则表达式;ProGuard 不会打印与匹配名称的类有关的警告。忽略警告可能是危险的。例如,如果确实需要处理未解决的类或类成员,则处理后的代码将无法正常工作。只有在您知道自己在做什么时才使用此选项!

-keep class

指定需要保存为代码入口点的类和类成员(字段和方法)。例如,为了保留一个应用程序,您可以指定主类以及它的主方法。为了处理一个库,您应该指定所有可公开访问的元素。

希望这个能帮到你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接