Rog*_*ach 12 java obfuscation scala proguard
我试图使用Proguard缩小和混淆我的Scala/Java程序.虽然我只使用scala-library.jar,但一切都很好,但是当我将scala-swing.jar添加到我的罐子中时,我得到以下内容:
Warning: scala.swing.ComboBox: can't find referenced class scala.swing.ComboBox$selection
Warning: scala.swing.ListView: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$: can't find referenced class scala.swing.ListView$selection$indices
Warning: scala.swing.ListView$selection$: can't find referenced class scala.swing.ListView$selection$items
Warning: scala.swing.ListView$selection$$anon$7: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$Indices: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection$indices
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection$indices
Warning: scala.swing.ListView$selection$indices$: can't find referenced class scala.swing.ListView$selection
Warning: scala.swing.ListView$selection$items$: can't find referenced class scala.swing.ListView$selection
Run Code Online (Sandbox Code Playgroud)
如果我查看jar,我发现实际上没有这样的文件 - scala.swing.ComboBox$selection$.class而不是scala.swing.ComboBox$selection.class.手动重命名不起作用 - 然后它抱怨该文件包含具有不同名称的类.
那么,scala-swing.jar中的这些非法引用是什么?还是Proguard的一个错误?
你能建议一个解决方法吗?
编辑:我正在使用Scala 2.9.0.1和Proguard 4.6
编辑2:使用Scala 2.9.1.final jar没有帮助.
它看起来像是 scala 编译器中的一个错误。例如,类文件 scala/swing/ComboBox.class 包含以下方法:
public final scala.swing.ComboBox$selection$ selection()
Run Code Online (Sandbox Code Playgroud)
在内部,方法签名表示如下:
()Lscala/swing/ComboBox$selection$;
Run Code Online (Sandbox Code Playgroud)
看起来不错。但是,该方法还有一个 Signature 属性来跟踪已删除的泛型:
()Lscala/swing/ComboBox<TA;>.selection;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,签名末尾缺少 $。在 ProGuard 中,您可以通过指定来解决该问题
-dontwarn scala.swing.**
Run Code Online (Sandbox Code Playgroud)