我的很多GUI都在FXML文件中描述,对于Buttons和其他元素,可以选择直接从FXML设置事件处理程序,绑定到控制器中的方法,设置在同一个FXML文件中。
因此,如果有一个类dataSource: MatTableDataSource<any>;
displayedColumns = ['col1', 'col2', ... ];
@ViewChild('scheduledOrdersPaginator') paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
ngOnInit(): void {
// Load data
this.dataSource = new MatTableDataSource(somearray);
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.sort;
}
并且有一个方法view.Controller
,那么它看起来像这样:
public void foo()
然而,在使用ProGuard进行模糊处理后,它变成了这样:
<StackPane fx:controller="view.Controller" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Button onAction="#foo" />
</children>
</StackPane>
<StackPane fx:controller="b.D" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Button onAction="#foo" />
</children>
</StackPane>
中的foo()
会被混淆,但view.Controller
中的方法调用却没有。我正在使用onAction
参数。有一个类似的错误,ProGuard不会混淆自定义控件,这可以通过删除FXML中的导入和编写完全限定的路径来解决。我认为,这种解决方法不能用于这种情况。除了将所有-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF,**.xml,**.css,**.fxml
从FXML中的onAction
移动到Java中的button.setOnAction()
(这很繁琐且工作量很大)之外,可以做些什么呢?
我正在使用ProGuard 6.0
答案 0 :(得分:0)
所以最后我写了一个小工具从ProGuard解压缩jar,根据提供的映射重命名所有onAction调用,然后再将它打包回jar。 This是一个工具,万一有人需要它(虽然它主要是从SO和一些正则表达式的答案组合而成,没什么特别的。)