5

全部

我正在使用 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 类被保留,尽管我没有在我的代码中使用它。

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

谢谢阿米尔

4

1 回答 1

1

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

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

于 2013-09-21T00:42:46.700 回答