我已在gradle文件中启用minifyEnabled
,因为它使用ProGuard的功能来混淆代码,因此会产生一些错误。
等等。
我已经浏览了ProGuard
文档。我猜错this是使用第三方库和jars发生的错误。因为我有更多的库和jars,所以它会混淆。我决定哪一个应保留在proguard-rules.pro
中,哪一个不存在?还有什么方法可以成功有效地使用ProGuard?
答案 0 :(得分:3)
ProGuard会分析应用程序中的所有代码(包括库),如果它看到未解析的引用(或其他问题,但未解析的引用在这里很重要),则会生成警告。库通常引用项目中不存在的系统或库代码是非常常见的。
例如:Picasso可选地与OkHttp集成,并且具有引用该库的代码。但如果你还没有包括OkHttp ProGuard会警告未解决的参考文献。
成功构建不得有任何来自ProGuard的警告。 ProGuard还检查反射,如果在反射中找到未解析的引用,ProGuard将生成注释而不是警告。警告和注释都可能指向类路径的问题。您可以自己检查代码以查看是否存在实际问题,或者信任其代码在Android(以及目标平台版本)上运行的库。
Kevin Schultz开辟了ProGuard配置文件的公共集合。他的博客帖子应该可以帮助您开始使用配置文件。 http://www.kevinrschultz.com/blog/2014/02/15/proguard-with-gradle/
请仔细检查您复制的配置。他们有时可能会有点激进。如果可能,您希望避免-dontwarn/dontnote {entire-package}
,而是缩小实际问题的范围。
答案 1 :(得分:1)
您需要添加特定于您使用的库的proguard规则。 https://github.com/StarWar/android-proguard-snippets/tree/master/libraries
提供了此类规则的汇编您还可以尝试为导致问题的包添加dontwarn指令。这方面的一个例子是-dontwarn org.codehaus.jackson。**