首页 文章

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

提问于
浏览
0

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

  • 注意:有1个动态创建的类实例的类转换 . 您可以考虑明确保留所提及的类和/或它们的实现(使用'-keep') .

  • 警告:有309个未解析的类或接口引用 . 您可能需要添加缺少的库jar或更新其版本 . 如果您的代码在没有缺少类的情况下正常工作,则可以使用'-dontwarn'选项禁止显示警告 . (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass

以及更多 .

我已经浏览了ProGuard documentation.i猜this是发生了什么错误 . 使用第三方库和jars.and混乱,因为我有更多的库和jars.how我可以决定哪一个应该保留在我的 proguard-rules.pro 和哪个一个不?还有什么方法可以成功有效地使用ProGuard?

2 回答

  • 3

    您需要添加特定于您使用的库的proguard规则 . 有关此类规则的汇编,请访问https://github.com/StarWar/android-proguard-snippets/tree/master/libraries

    您还可以尝试为导致问题的包添加dontwarn指令 . 这方面的一个例子是-dontwarn org.codehaus.jackson . **

  • 1

    ProGuard会分析应用程序中的所有代码(包括库),如果它看到 unresolved references (或其他问题,但未解决的引用在这里很重要),则会生成警告 . 库通常引用项目中不存在的系统或库代码是很常见的 .

    例如:Picasso可选地与OkHttp集成,并且具有引用该库的代码 . 但如果你还没有包括OkHttp,ProGuard会警告未解决的参考文献 .

    成功构建不得有任何来自ProGuard的警告 . ProGuard还检查反射,如果在 reflection 中找到未解析的引用,ProGuard将生成注释而不是警告 . 警告和注释都可能指向类路径的问题 . 您可以自己检查代码以查看是否存在实际问题,或者信任其代码在Android(以及目标平台版本)上运行的库 .

    Kevin Schultz开辟了ProGuard配置文件的公共集合 . 他的博客帖子应该可以帮助您开始使用配置文件 . http://www.kevinrschultz.com/blog/2014/02/15/proguard-with-gradle/

    请仔细检查您复制的配置 . 他们有时候会有点激进 . 如果可能的话,你想避免 -dontwarn/dontnote {entire-package} 而是缩小实际问题 .

相关问题