所有
我正在使用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类保留了,虽然我没有在我的代码中使用它。
有没有解决这个问题,所以我只保留我在代码中实际使用的类?
由于 阿米尔
答案 0 :(得分:1)
不幸的是,ProGuard对-whyareyoukeeping
的回答有时包含循环推理。虽然收缩操作是正确的。该类不会保留,因为它会覆盖 equals(),但因为它实际上是由其他所需的类引用的。通过查询其他课程,您可以获得更好的印象。
由于传递依赖性,即使是一小部分Scala也会拖入很多基础类(通常一见钟情)。与原来的兆字节大小相比,300k的最终尺寸似乎并不常见。