Nee*_*rma 5 java javafx native proguard tableview
我们创建了一个JavaFX应用程序,其中包含许多用于显示数据的TableView。我们已经使用Ant构建了本地包,并且正在使用Proguard-4.8对 jar 进行模糊处理,并且 能够使用该经过混淆的jar成功创建本地bundle exe。当我们运行exe时,它成功启动了应用程序,一切正常,数据存在于tableView中,但是我们无法在TableView中看到数据。在exe的TableView截屏下方附有-
注意:我们可以使用创建的jar和exe来查看TableView中的数据,而不会混淆。

在build.xml中混淆jar的步骤
<target name="ObfuscatingProject" depends="apidocs">
<taskdef resource="proguard/ant/task.properties" classpath="${WorkingFolder}/proguard.jar" />
<proguard>
-dontusemixedcaseclassnames
-printmapping Project_Proguard.map
-dontshrink
-dontoptimize
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-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"
-libraryjars ${WorkingFolder}/libs/BareBonesBrowserLaunch.jar
-libraryjars ${WorkingFolder}/libs/activation.jar
-libraryjars ${WorkingFolder}/libs/log4j-1.2.16.jar
-libraryjars ${WorkingFolder}/libs/commons-codec-1.5.jar
-libraryjars ${WorkingFolder}/libs/commons-httpclient-3.1.jar
-libraryjars ${WorkingFolder}/libs/commons-logging-1.1.1.jar
-libraryjars ${WorkingFolder}/libs/commons-io-2.0.1.jar
-libraryjars ${WorkingFolder}/libs/xercesImpl-2.9.1.jar
-libraryjars ${WorkingFolder}/libs/javax.mail.jar
-libraryjars ${WorkingFolder}/libs/balloontip-1.2.1.jar
-libraryjars ${WorkingFolder}/libs/httpclient-4.1.1.jar
-libraryjars ${WorkingFolder}/libs/httpcore-4.1.3.jar
-libraryjars ${WorkingFolder}/libs/jcifs-1.3.16.jar
-libraryjars ${WorkingFolder}/libs/proguard-4.8.jar
-libraryjars ${WorkingFolder}/libs/xml-apis-1.3.04.jar
-libraryjars ${WorkingFolder}/libs/swingx-1.6.jar
-libraryjars ${WorkingFolder}/libs/derby.jar
-injars ${WorkingFolder}/${app.name}.jar
-injars ${WorkingFolder}/CustomJars/LicVerifier.jar(!META-INF/MANIFEST.MF)
-injars ${WorkingFolder}/CustomJars/LicUtility.jar(!META-INF/MANIFEST.MF)
-outjars ${WorkingFolder}/ObfuscatedProjectJar/ProjectObfuscated.jar
-ignorewarnings
-keepattributes
Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
-adaptresourcefilecontents **.fxml,**.properties,META-INF/MANIFEST.MF,images/*.jar,Project.version
-keepclassmembernames class * {
@javafx.fxml.FXML *;
}
-keepclassmembernames class com.javafx.main.Main {
public static void main(java.lang.String[]);
}
-keep class com.javafx.main.*
-keepclasseswithmembers public class com.javafx.main.Main{
public static void main(java.lang.String[]);
}
-keepclasseswithmembers public class com.project.main.ProjectEntryFX{
public static void main(java.lang.String[]);
}
-keepclasseswithmembers public class net.project.license.LicEntryPoint{
public *;
}
-keep class * extends org.xml.sax.helpers.DefaultHandler
-keepclassmembers class * extends org.xml.sax.helpers.DefaultHandler {
private *;
public *;
}
</proguard>
</target>
Run Code Online (Sandbox Code Playgroud)
有人可以建议我要进行哪些改进以查看JavaFX TableView中的数据吗?
感谢帮助!!
小智 5
javaFx 必须考虑类的名称来访问类的某些方法。
例如:如果您有一个带有属性名称、姓氏、...的 Person 类,您可能写道:
public Class Person {
private StringProperty name, surname,....
public StringProperty nameProperty() {
return name;
}
public StringProperty surnameProperty() {
return surname;
}
...
}
Run Code Online (Sandbox Code Playgroud)
像 nameProperty、surnNameProperty 这样的方法可能会在您的应用程序中通过如下代码访问:
new PropertyValueFactory<Person, String>("name")
new PropertyValueFactory<Person, String>("surName")
Run Code Online (Sandbox Code Playgroud)
混淆器不得重命名此类方法(nameProperty、surnameProperty...)。你可以用这样的配置来说明这一点:
-keepclassmembers public class yourpackage.** {
public javafx.beans.property.StringProperty *Property();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |