如何将 Proguard 混淆集成到我的 JavaFX 的 IntelliJ 构件中?

5
我正在使用IntelliJ IDEA作为IDE开发JavaFX应用程序。
到目前为止,一切进展顺利,我已经配置好了所有的外部库,并正确创建了我的JavaFX artifact。
现在我想在创建artifact时集成混淆(使用Proguard)。
IntelliJ在artifact属性中提供了“预处理”和“后处理”选项,可以定义要运行的Ant任务。
但是我不知道如何创建该任务并告诉编译器我的混淆选项。
非常感谢您提供任何提示,
最好的问候
2个回答

11

有三种基本方法可以实现:

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

这是使用第3种方法使用Ant和Proguard的基本示例: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网站提供了大量信息,但理解起来可能会比较困难。

实际上,网络上有很多示例可以帮助你完成这个任务。只需在Google搜索javafx proguard,你可能会找到一些完整的好例子。

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

如果是我,我会先创建一个Ant脚本编译我的应用程序而不进行混淆,然后再加入Proguard。


非常感谢。这解决了我的问题,现在一切都被混淆了! - Hugo Marisco

0

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

确保您有一个“default”目标。否则任务将不会执行。build.xml示例:

<?xml version="1.0"?>
<project name="ant_task" default="obfuscate" basedir=".">
    <target name="obfuscate">
        <taskdef resource="proguard/ant/task.properties"
             classpath="/opt/proguard5.2.1/lib/proguard.jar" />
        <proguard configuration="proguard.cfg"/>
    </target>
</project>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接