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

时间:2013-12-07 20:01:43

标签: intellij-idea javafx proguard

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

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

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

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

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

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

祝你好运

2 个答案:

答案 0 :(得分:10)

有三种基本方法:

  1. 创建一个普通的proguard.cfg文件,并从ant
  2. 引用它
  3. 使用XML表示法将您的proguard设置直接放在ant中
  4. 使用proguard.cfg格式
  5. 将您的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 *;
    }
    

    确保包含Java / JavaFX库

    -libraryjars "${java.home}/lib/rt.jar"
    -libraryjars "${java.home}/lib/ant-javafx.jar"
    -libraryjars "${java.home}/lib/jfxrt.jar"
    

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

    -adaptresourcefilecontents **.fxml
    

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

    -keepclassmembernames class * {
            @javafx.fxml.FXML *;
        }
    

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

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

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

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

答案 1 :(得分:0)

关于在想法的“后处理”中运行Ant任务的一些补充信息。

确保您拥有'默认'目标。否则任务不会执行。 build.xml示例:

This is the derived class.
This is the derived class.