Proguard不删除某些类

时间:2013-09-18 10:08:53

标签: scala proguard

所有

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

此时我使用的scala库很少,但我的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类保留了,虽然我没有在我的代码中使用它。

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

由于 阿米尔

1 个答案:

答案 0 :(得分:1)

不幸的是,ProGuard对-whyareyoukeeping的回答有时包含循环推理。虽然收缩操作是正确的。该类不会保留,因为它会覆盖 equals(),但因为它实际上是由其他所需的类引用的。通过查询其他课程,您可以获得更好的印象。

由于传递依赖性,即使是一小部分Scala也会拖入很多基础类(通常一见钟情)。与原来的兆字节大小相比,300k的最终尺寸似乎并不常见。