我已经为Mac OSx和Windows编写了一个Java应用程序,但是我已经在Windows上开发了它。 因此,我使用java.lang.reflect.*
为了实现“关于”和“退出”处理程序而不接收exception。
我已经将它导出为一个可执行Jar,并且在两个操作系统上都可以正常工作。 但是,我想混淆应用程序,我正在使用ProGaurd来做到这一点。 我已经指定了它在Windows上运行所需的库(rt.jar,jsse.jar,jce.jar),它在Windows上仍然可以正常工作,但是ProGaurd告诉我,有两个未parsing的dynamic引用类或接口和混淆的应用程序不能正常工作在Mac上(关于和退出处理程序不起作用)。
我读了ui.jar
是必需的,所以我从我的Mac中复制它,并指定它在ProGaurd,但似乎并没有解决问题! 任何解决scheme赞赏然后
提前致谢
UPDATE
我现在使用AppleJavaExtensions来实现使用com.apple.eawt.Application
的处理程序而不是反映。 但是,我仍然得到完全相同的问题! 这是我目前使用的代码:
package ap; import com.apple.eawt.AboutHandler; import com.apple.eawt.AppEvent; import com.apple.eawt.AppEvent.QuitEvent; import com.apple.eawt.Application; import com.apple.eawt.QuitHandler; import com.apple.eawt.QuitResponse; import com.gui.Tabs; public class xa implements AboutHandler, QuitHandler { // Constructor to register/install the necessary handler's public xa(){ Application.getApplication().setAboutHandler(this); Application.getApplication().setQuitHandler(this); } // Implemented method to catch the About menu item @Override public void handleAbout(AppEvent.AboutEvent e) { Tabs.switchAbout(); } // Implemented method to catch the Quit menu item @Override public void handleQuitRequestWith(QuitEvent arg0, QuitResponse arg1) { Tabs.quit(); } }
我正在使用ProGuard GUI来混淆我的应用程序。 在Obsfucation“标签”底部我已经添加类ap.xa
并指定它扩展/实现AboutHandler, QuitHandler
。 我也添加了类com.gui.Tabs
但问题仍然存在。
也许你可以尝试苹果Java扩展 。
使用Apple Java扩展,您可以在Windows上开发而不使用java.lang.reflect.*
类,ProGuard也许会更容易。
如果您告诉ProGuard不要混淆实现About和Quit处理程序的类,它会有帮助吗?
试试-dontoptimize
选项。 有些方法在“无效”时被删除。 在Mac上执行Windows上的ProGuard。 或者一个愚蠢的选择:尝试在Mac上混淆,并提供两个版本。
奥普斯,我已经解决了这个问题…而我只犯了一个愚蠢的错误
因为我正在使用ProGuard GUI,所以在添加屏幕中看不到“班级成员”部分。 因此,虽然ProGuard并没有混淆课程本身,但它是混淆的方法,因此听众不工作。 所以,我最终保留了ap.xa
和所有的方法(包含实际监听器的类)和com.apple.**
(JavaAppleExtensions包)
但是,还是有一件事发生。 当我从终端运行混淆的JAR文件时收到以下输出:
Andrews-MacBook-Pro:~ Andy$ java -jar /Users/Andy/Desktop/YLIT\ Final\ 2.jar Jun 9 20:50:29 Andrews-MacBook-Pro.local java[959] <Error>: CGContextGetCTM: invalid context 0x0 Jun 9 20:50:29 Andrews-MacBook-Pro.local java[959] <Error>: CGContextSetBaseCTM: invalid context 0x0 Jun 9 20:50:29 Andrews-MacBook-Pro.local java[959] <Error>: CGContextGetCTM: invalid context 0x0 Jun 9 20:50:29 Andrews-MacBook-Pro.local java[959] <Error>: CGContextSetBaseCTM: invalid context 0x0