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

标签 intellij-idea javafx proguard

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

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

现在我想在创建工件时集成混淆(使用 Proguard)。

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

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

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

此致

最佳答案

有3种基本方法可以做到:

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

    确保包含 Java/JavaFX 库
    -libraryjars "${java.home}/lib/rt.jar"
    -libraryjars "${java.home}/lib/ant-javafx.jar"
    -libraryjars "${java.home}/lib/jfxrt.jar"
    

    如果您使用 FXML 文件,您需要确保您的 FXML 文件的重命名类似于它们各自的 Controller 文件:
    -adaptresourcefilecontents **.fxml
    

    任何用@FXML 注释的东西都是通过反射访问的,所以不要混淆它们:
    -keepclassmembernames class * {
            @javafx.fxml.FXML *;
        }
    

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

    老实说,网络上有很多示例可以向您展示如何执行此操作。只需谷歌 javafx proguard,您可能会找到一些很好的完整示例。

    编辑:至于 IntelliJ 如何将信息传递给 Ant ......我不知道。它可能传递了一些变量,您可以像正常的 Ant 属性一样引用它们。如果您在网上找不到,我确信 JetBrains 网站在他们的网站上有相关信息。

    如果是我,我会创建一个 ant 脚本来编译我的应用程序,而不会混淆,然后在你把它平方后添加 proguard。

    关于intellij-idea - 如何在我的 JavaFX 的 IntelliJ 工件中集成 Proguard 混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20445960/

    相关文章:

    Android:Proguard 的推荐配置是什么?

    java - Lombok 的@SuperBuilder-错误Java : cannot find symbol

    java - 'filter()' and ' map()'可以交换

    java - Intellij IDEA 代码覆盖率不起作用

    JavaFX Applet 网页刷新和关闭通知

    java - 如何向我的 JavaFX 应用程序添加重置/重新启动按钮以重置我的场景?

    java - 如何取消拆分包/合并模块

    android - 无法使用proguard编译

    docker - 如何在 Intellij Idea 上的 docker 容器上编译 Flutter 应用程序?

    java - 使用 Proguard 将 Guava 嵌入到另一个 jar 中