启用 ProGuard 会导致签名 APK 生成失败?
Posted
技术标签:
【中文标题】启用 ProGuard 会导致签名 APK 生成失败?【英文标题】:Enabling ProGuard causes failing signed APK generation? 【发布时间】:2016-02-12 04:53:26 【问题描述】:我在我的 gradle 文件中启用了 minifyEnabled
以使用 ProGuard 的功能来混淆代码,结果它会引发一些错误。
还有更多。
我已经浏览了ProGuard
文档。我猜this 发生了什么错误。我正在使用第三方库和 jars。它令人困惑,因为我有更多数量的库和 jars。我该如何决定哪一个应该保留在我的proguard-rules.pro
中,哪个不保留?为了成功有效地使用 ProGuard,还需要做什么?
【问题讨论】:
【参考方案1】:ProGuard 会分析您应用程序中的所有代码(包括库),并在发现 未解决的引用(或其他问题,但未解决的引用在这里很重要)时生成警告。库引用项目中不存在的系统或库代码是很常见的。
例如: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
,而是缩小实际问题的范围。
【讨论】:
【参考方案2】:您需要添加特定于您使用的库的 proguard 规则。此类规则的汇编可在https://github.com/StarWar/android-proguard-snippets/tree/master/libraries
获得您也可以尝试为引起问题的软件包添加 dontwarn 指令。这方面的一个例子是 -dontwarn org.codehaus.jackson.**
【讨论】:
以上是关于启用 ProGuard 会导致签名 APK 生成失败?的主要内容,如果未能解决你的问题,请参考以下文章
在 Android Studio 3 中激活 proguard 生成签名 Apk 时出错
Android - 使用 Proguard 创建签名的 APK