Ant 模糊处理后,JavaFx TableView内容消失

Ant 模糊处理后,JavaFx TableView内容消失,ant,tableview,javafx,obfuscation,proguard,Ant,Tableview,Javafx,Obfuscation,Proguard,我创建了一个JavaFX应用程序,其中有许多TableView来显示内容,若我运行Jar文件,该应用程序运行良好。因为我需要将应用程序分发给我的客户,所以我的代码应该是模糊的。我正在使用Proguard-4.8对代码进行模糊处理 我已经使用Ant创建了一个示例TableView构建脚本,它混淆了示例jar 在模糊处理之前,仅适用于jar- 模糊处理后的Jar- 我已将完整的构建脚本项目上载到- 我已经完全运行了它。你会发现- build.xml- 没有混淆的编译Jar- 模糊Jar- P

我创建了一个JavaFX应用程序,其中有许多TableView来显示内容,若我运行Jar文件,该应用程序运行良好。因为我需要将应用程序分发给我的客户,所以我的代码应该是模糊的。我正在使用Proguard-4.8对代码进行模糊处理

我已经使用Ant创建了一个示例TableView构建脚本,它混淆了示例jar

在模糊处理之前,仅适用于jar-

模糊处理后的Jar-

我已将完整的构建脚本项目上载到-

我已经完全运行了它。你会发现-

  • build.xml-
  • 没有混淆的编译Jar-
  • 模糊Jar-
  • Proguard.map-
  • 源Java类-
  • 其他的事情是- 这是我的build.xml文件-

    <project name="sample" default="cleanBuildPackage" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
        <property environment="env"/>
    
    
        <property name="WorkingFolder" location="."/>
        <property name="ClassPath" location="${env.JAVA_HOME}/jre/lib/jfxrt.jar;${env.JAVA_HOME}/lib/ant-javafx.jar;${WorkingFolder}/lib/proguard.jar;"/>
        <property name="dist" value="dist"/>  
        <property name="main.class" value="TableViewWithButton"/>
        <property name="app.name" value="Sample"/>
    
    
        <target name="init">
            <echo message="Java installation directory: ${java.home}"/>
            <!-- Create the time stamp -->
            <tstamp/>
    
            <delete dir="${WorkingFolder}/build"/>
            <delete dir="${dist}"/>
            <mkdir dir="${dist}"/>
            <mkdir dir="${WorkingFolder}/build"/>
        </target>
    
        <target name="CompilingSample" depends="init">
            <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"      
                 uri="javafx:com.sun.javafx.tools.ant" classpath=".;${env.JAVA_HOME}/jre/lib/jfxrt.jar"/>
            <javac classpath="${ClassPath};" srcdir="${WorkingFolder}/src" destdir="${WorkingFolder}/build"/>
        </target> 
    
    
    
        <target name="CreatingSampleJar" depends="CompilingSample" description="generate the distribution" >
            <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"      
            uri="javafx:com.sun.javafx.tools.ant" classpath="${env.JAVA_HOME}/lib/ant-javafx.jar"/>
                <fx:jar destfile="${WorkingFolder}/${app.name}.jar">
                        <fx:application mainClass="${main.class}"/>
                    <fileset dir="${WorkingFolder}/build"/>
                </fx:jar>
        </target> 
    
        <target name="Ofuscating" depends="CreatingSampleJar" >
    
            <taskdef resource="proguard/ant/task.properties" classpath="${WorkingFolder}/lib/proguard.jar" />
                <mkdir dir="obfuscated"/>
                    <proguard printmapping="obfuscated/ObfuscatedProguard.map"
                                    renamesourcefileattribute="SourceFile" ignorewarnings="true">
    
                        -dontshrink
                        -dontoptimize
    
                        -libraryjars "${java.home}/lib/rt.jar"
                        -libraryjars "${java.home}/lib/javaws.jar"
                        -libraryjars "${env.JAVA_HOME}/lib/ant-javafx.jar"
                        -libraryjars "${env.JAVA_HOME}/jre/lib/jfxrt.jar"           
    
    
                        -injars ${WorkingFolder}/${app.name}.jar                                    
    
                        -outjars ${WorkingFolder}/Obfuscated.jar
    
                        -ignorewarnings
    
                        <keepattribute name="InnerClasses" />
                            <keepattribute name="SourceFile" />
                            <keepattribute name="LineNumberTable" />
                            <keepattribute name="Deprecated" />
                            <keepattribute name="*Annotation*" />
                            <keepattribute name="Signature" />
    
                        -adaptresourcefilecontents **.fxml,**.properties,META-INF/MANIFEST.MF,images/*,publicCerts.store,.version
    
                                <!--  
                                If I am adding this then I am able to see TableView Contents, but it do not obfuscate all public classes and their methods.
                                <keep access="public">
                                                     <method access="public protected" />
                                            </keep> 
                                             -->
    
                        -keepclassmembernames class * {
                            @javafx.fxml.FXML *;
                        } 
                        -keepclasseswithmembers public class com.javafx.main.Main, TableViewWithButton {
                                public static void main(java.lang.String[]);
                        }                    
                </proguard>
    
    
        </target>
    
        <target name="Movejar" depends="Ofuscating">
            <move
            file="${WorkingFolder}/Obfuscated.jar"
            tofile="obfuscated/${app.name}Obfuscated.jar" verbose="true" overwrite="true" />
        </target>
    
    
    
        <target name="cleanBuildPackage" depends="Movejar">
                <fx:deploy width="800" height="600" nativeBundles="all" outdir="${dist}" outfile="${app.name}">
                    <fx:info title="${app.name}"/>
                        <fx:application name="${app.name}" mainClass="${main.class}"/>
                        <fx:resources>
                            <fx:fileset dir="${dist}" includes="*.jar"/>
                 </fx:resources>
             </fx:deploy>
        </target>
    
    </project>
    
    
    -dontshrink
    -dontoptimize
    -libraryjars“${java.home}/lib/rt.jar”
    -libraryjars“${java.home}/lib/javaws.jar”
    -libraryjars“${env.JAVA_HOME}/lib/antjavafx.jar”
    -libraryjars“${env.JAVA_HOME}/jre/lib/jfxrt.jar”
    -injars${WorkingFolder}/${app.name}.jar
    -outjars${WorkingFolder}/Obfuscated.jar
    -忽视警告
    -AdapterResourceFileContents**.fxml、**.properties、META-INF/MANIFEST.MF、images/*、publicCerts.store、.version
    -keepclassmembernames类*{
    @javafx.fxml.fxml*;
    } 
    -KeepClassSwithMembers公共类com.javafx.main.main,TableViewWithButton{
    公共静态void main(java.lang.String[]);
    }                    
    
    在build.xml中,如果我添加这几行,那么我就可以看到TableView内容,但它不会混淆所有公共类及其方法

    <keep access="public">
         <method access="public protected" />
    </keep> 
    
    
    
    我需要把我的项目完全弄糊涂。有没有其他方法可以使jar文件模糊化,而不使公共类保持未模糊状态,这样我就可以完全看到TableView文本

    谢谢


    尼拉姆·夏尔马(Neelam Sharma)

    我建议尝试使用长格式的属性值工厂(Property Value Factory)

    col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Test, String>,
                 ObservableValue<String>>() {
         public ObservableValue<String> call(TableColumn.CellDataFeatures<Test, String> t) {
             // t.getValue() returns the Test instance for a particular TableView row
             return t.getValue().testProperty();
             // or
             return new SimpleStringProperty(t.getValue().getMessage());
         }
      });
    
    col.setCellValueFactory(新回调(){
    公共observeValue调用(TableColumn.celldatat){
    //t.getValue()返回特定TableView行的测试实例
    返回t.getValue().testProperty();
    //或
    返回新的SimpleStringProperty(t.getValue().getMessage());
    }
    });