Jar 파일을 실행하면 응용 프로그램이 잘 작동하여 내용을 표시하는 데 많은 TableView가있는 JavaFX 응용 프로그램을 하나 만들었습니다. 내 코드를 난독 화해야하므로 내 고객에게 응용 프로그램을 배포해야합니다. 내 코드의 난독 화를 위해 Proguard-4.8을 사용하고 있습니다.난독 화 후에 JavaFx TableView 내용이 사라졌습니다.
샘플 jar을 난처하게 만드는 Ant를 사용하여 하나의 샘플 TableView 빌드 스크립트를 만들었습니다. http://neelamsharma.s3.amazonaws.com/SampleObfuscationBuildScript.zip
내가 가진 - 나는 나의 전체 빌드 스크립트 프로젝트를 업로드 한
- 난독 항아리 후
- 난독 항아리 만 준수하기 전에
그것을 완전히 실행하십시오. 당신은 발견 할 것이다 -
- 의 build.xml - http://neelamsharma.s3.amazonaws.com/SampleObfuscationBuildScript/build.xml 난처하지 않고
- 컴파일 된 항아리 - http://neelamsharma.s3.amazonaws.com/SampleObfuscationBuildScript/Sample.jar
- 난독 항아리 - http://neelamsharma.s3.amazonaws.com/SampleObfuscationBuildScript/obfuscated/SampleObfuscated.jar
- Proguard.map - http://neelamsharma.s3.amazonaws.com/SampleObfuscationBuildScript/obfuscated/ObfuscatedProguard.map
- 소스 자바 클래스 - http://neelamsharma.s3.amazonaws.com/SampleObfuscationBuildScript/src/TableViewWithButton.java
이건 내 build.xml 파일입니다 - - 다른 일이 있다는 것입니다 내가있는 TableView 내용을 볼 수 있어요 다음이 줄을 추가하는 경우의 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>
하지만, 모든 public 클래스와 그 방법을 당황하게하지 않습니다 .
<keep access="public">
<method access="public protected" />
</keep>
내 프로젝트가 완전히 난독 화되어야합니다. 공용 클래스를 UN- 난독 화하지 않고 jar 파일을 난독 화하는 다른 방법으로 인해 TableView 텍스트를 완전히 볼 수 있습니다.
감사합니다,
Neelam 샤르마