启用ProGuard会导致签名APK生成失败吗?

时间:2015-11-11 05:31:00

标签: android apk build.gradle signed android-proguard

我已在gradle文件中启用minifyEnabled,因为它使用ProGuard的功能来混淆代码,因此会产生一些错误。

  • 注意:有1个动态创建的类实例的类转换。   您可以考虑明确保留上述类和/或   他们的实施(使用' -keep')。
  • 警告:有309个未解析的类或接口引用。      您可能需要添加缺少的库jar或更新其版本。      如果您的代码工作正常而没有丢失的类,则可以禁止      警告' -dontwarn'选项。      (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass

等等。

我已经浏览了ProGuard文档。我猜错this是使用第三方库和jars发生的错误。因为我有更多的库和jars,所以它会混淆。我决定哪一个应保留在proguard-rules.pro中,哪一个不存在?还有什么方法可以成功有效地使用ProGuard?

2 个答案:

答案 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。**