【问题标题】:Enabling ProGuard causes failing signed APK generation?启用 ProGuard 会导致签名 APK 生成失败?
【发布时间】:2016-02-12 04:53:26
【问题描述】:

我在我的 gradle 文件中启用了 minifyEnabled 以使用 ProGuard 的功能来混淆代码,结果它会引发一些错误。

  • 注意:动态创建的类实例有 1 个类转换。 您可能会考虑明确保留提到的类和/或 他们的实现(使用'-keep')。
  • 警告:有 309 个未解析的类或接口引用。 您可能需要添加缺少的库 jar 或更新它们的版本。 如果您的代码在没有丢失类的情况下工作正常,您可以抑制 带有“-dontwarn”选项的警告。 (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)

还有更多。

我已经浏览了ProGuard 文档。我猜this 发生了什么错误。我正在使用第三方库和 jars。它令人困惑,因为我有更多数量的库和 jars。我该如何决定哪一个应该保留在我的proguard-rules.pro 中,哪个不保留?为了成功有效地使用 ProGuard,还需要做什么?

【问题讨论】:

    标签: android apk build.gradle signed android-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.**

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        • 2016-07-25
        • 1970-01-01
        • 2021-11-23
        • 2018-12-15
        • 1970-01-01
        相关资源
        最近更新 更多