如何在我的JavaFX的IntelliJ工件中集成Proguard混淆?

Hug*_*sco 5 javafx intellij-idea proguard

我正在使用IntelliJ IDEA作为IDE开发JavaFX应用程序.

到目前为止,一切运行顺利,我配置了所有外部库,并正确创建了我的JavaFX工件.

现在我想在创建工件时集成模糊处理(使用Proguard).

IntelliJ在工件属性中有一个"预处理"和"后处理"选项,我可以在其中定义要运行的Ant任务.

但我不知道如何创建该任务并告诉编译器我的混淆选项.

非常感谢您提供任何线索,

最好的祝福

jhs*_*ets 11

您有三种基本方法:

  1. 创建一个普通的proguard.cfg文件,并从ant引用它
  2. 使用XML表示法将您的proguard设置直接放在ant中
  3. 使用proguard.cfg格式将您的proguard设置直接放在ant中

以下是使用Proguard和Ant的第三种方法的基本示例:http: //www.reviewmylife.co.uk/blog/2007/10/20/proguard-eclipse-ant-buildxml/

关于Proguard的重要事项是,你想要混淆的一切都必须在JAR文件中,你需要明确地告诉它不要混淆某些东西(比如你的程序入口点,你通过反射访问的东西等等) ).

JavaFX创建一个文件,用作要防止混淆的入口点:

-keepclasseswithmembers public class com.javafx.main.Main {
    public *; public static *;
}
Run Code Online (Sandbox Code Playgroud)

确保包含Java/JavaFX库

-libraryjars "${java.home}/lib/rt.jar"
-libraryjars "${java.home}/lib/ant-javafx.jar"
-libraryjars "${java.home}/lib/jfxrt.jar"
Run Code Online (Sandbox Code Playgroud)

如果您正在使用FXML文件,则需要确保将FXML文件重命名为与其各自的控制器文件类似:

-adaptresourcefilecontents **.fxml
Run Code Online (Sandbox Code Playgroud)

任何使用@FXML注释的内容都是通过反射访问的,所以不要混淆它们:

-keepclassmembernames class * {
        @javafx.fxml.FXML *;
    }
Run Code Online (Sandbox Code Playgroud)

Proguard网站有很多信息,但可能很难理解.

老实说,网上有很多例子可以告诉你如何做到这一点.只是谷歌javafx proguard,你可能会找到一些很好的完整例子.

编辑:就IntelliJ如何将信息传递给Ant而言......我不知道.它可能会传递一些变量,就像正常的Ant一样.如果你在网上找不到它,我肯定JetBrains网站会在他们的网站上有相关信息.

如果是我,我只是创建一个蚂蚁脚本来编译我的应用程序而不进行混淆,然后在你得到平方后添加proguard.