我完全理解-keep
会保留课程,而-dontwarn
只会确保您不会收到警告。但是,我经常发现自己在我的项目中包含另一个SDK时出现这种情况 - 他们的说明是添加一行:
-keep class com.fasterxml.jackson.** { *; }
当我这样做并尝试使用proguard进行编译时,确定我的构建中断了,我得到的错误类似于:
Warning:com.test.MyClass: can't find referenced class com.fasterxml.jackson.databind.ObjectReader
显然,只要我添加-dontwarn com.fasterxml.jackson.**
,错误就会消失。但为什么这首先发生了什么? -keep
切换应该足够,因为它保留了类。为什么必须用-dontwarn
加倍?
我的猜测是,它可能与引用在此过程中未实际重新编译的罐子有关。所以,如果有人知道为什么会这样做的确切原因(有时你需要-keep
,有时你需要用-dontwarn
复制它) - 我全都是耳朵。