我已经用Java编写了一个适用于Mac OSx和Windows的应用程序,但我在Windows上开发了它。因此,我使用java.lang.reflect.*
来实现“关于”和“退出”处理程序,而不会收到异常。
我已将其导出为可执行文件夹,并且在两个操作系统上一切正常。但是,我想混淆应用程序,我正在使用ProGaurd这样做。我已指定必要的库在Windows上运行(rt.jar,jsse.jar,jce.jar),它在Windows上仍能正常工作,但是ProGaurd告诉我有两个未解析的类动态引用或者接口和混淆的应用程序在Mac上不再正常工作(关于和退出处理程序不起作用)。
我在某处读到ui.jar
是必需的,所以我将它从我的Mac上复制并在ProGaurd中指定,但似乎没有解决问题!任何解决方案都值得赞赏...
提前致谢
更新
我现在使用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
,但问题仍然存在。
答案 0 :(得分:1)
也许你可以试试Apple Java Extensions。
使用Apple Java Extensions,您可以在不使用java.lang.reflect.*
类的情况下在Windows上进行开发,也许ProGuard会更容易。
答案 1 :(得分:0)
如果您告诉ProGuard不要混淆实现About和Quit处理程序的类,会有帮助吗?
答案 2 :(得分:0)
尝试使用-dontoptimize
选项。有些方法在没有效果的情况下被移除。"并在Windows上执行ProGuard ...适用于Mac。或者是一个愚蠢的选择:尝试在Mac上进行模糊处理并提供两个版本。
答案 3 :(得分:0)
Opps,我已经解决了这个问题...... 而我只是犯了一个愚蠢的错误
由于我使用的是ProGuard GUI,因此无法在添加屏幕中看到“类成员”部分。因此,虽然ProGuard没有混淆类本身,但是它混淆了方法,因此听众无法工作。所以,我最终'保持'ap.xa
及其所有方法(包含实际侦听器的类)和com.apple.**
(JavaAppleExtensions包)
然而,仍然有一件事发生。当我从终端I运行混淆的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