【问题标题】:Proguard does not remove certain classesProguard 不会删除某些类
【发布时间】:2013-09-23 01:05:17
【问题描述】:

全部

我正在使用 proguard 来混淆 scala 应用程序。

此时我使用的 scala-library 很少,但我的 jar 仍然是 ~300KB,其中 99% 是 scala-library 类。

使用 -whyareyoukeeping 选项,我看到它保留了任何覆盖 java.lang.Object 方法的类,例如“toString”或“equals”。 例如

scala.Some
  is invoked by    scala.Some.equals (300:300)
  implements       java.lang.Object.equals
  is a library method.

所以 scala.Some 类被保留,尽管我没有在我的代码中使用它。

有没有办法解决这个问题,所以我只保留我在代码中实际使用的类?

谢谢 阿米尔

【问题讨论】:

    标签: scala proguard


    【解决方案1】:

    不幸的是,ProGuard 对-whyareyoukeeping 的回答有时包含循环推理。收缩操作是正确的。该类没有被保留,因为它覆盖了 equals(),而是因为它实际上被某些其他所需的类引用。通过查询其他类,你可能会得到更好的印象。

    由于传递依赖,即使是一小块 Scala 也可以拖入许多基本类(乍一看常常令人惊讶)。与数兆字节的原始大小相比,300k 的最终大小似乎并不少见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-27
      • 2019-03-15
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多