Proguard 不会删除某些类

Ami*_*val 5 scala proguard

全部

我正在使用 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.
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢阿米尔

Eri*_*une 0

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

由于传递依赖关系,即使是一小部分 Scala 也可能会拖入大量基本类(乍一看通常令人惊讶)。与许多兆字节的原始大小相比,最终的 300k 大小似乎并不奇怪。