我的很多 GUI 都是在 FXML 文件中描述的,对于按钮和其他元素,有一个选项可以直接从 FXML 设置事件处理程序,绑定到控制器中的方法,设置在同一个 FXML 文件中。所以如果有一个类view.Controller
和一个方法public void foo()
,那么它看起来像这样:
<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>
然而,在混淆 ProGuard 之后,它变成了这样:
<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
没有。我正在-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF,**.xml,**.css,**.fxml
为此使用参数。有一个类似的错误,即 ProGuard 不会混淆自定义控件,这可以通过删除 FXML 中的导入并编写完全限定的路径来解决。我认为在这种情况下不能使用这种解决方法。除了将所有内容onAction
从 FXML 移到button.setOnAction()
Java 中(这很麻烦且工作量很大)之外,还能做些什么呢?
我正在使用 ProGuard 6.0
所以最后我写了一个小工具来从 ProGuard 解压 jar,根据提供的映射重命名所有 onAction 调用,然后再次将它打包回 jar。这是万一有人需要它的工具(尽管它主要是从 SO 和一些正则表达式的答案中结合起来的,没什么特别的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句