我用Proguard来混淆我的.JAR文件。混淆后,JAR文件未执行。在反编译混淆代码时,我发现我的主方法已重命名。
原始代码:
public static transient void main(String args[])
{
SwingUtilities.invokeLater(new Object() /* anonymous class not found */
class _anm1 {}
);
}
混淆代码:
public static transient void a(String as[])
{
SwingUtilities.invokeLater(new aa());
}
我取消选中了混淆标签中的所有选项,但仍然没有运气! 有什么帮助吗?
答案 0 :(得分:0)
我没有测试过,但我读到Proguard删除了未使用的类。 试试这种方式 - 也许有帮助:
public static transient void main(String args[])
{
SwingUtilities.invokeLater(new Object() /* anonymous class not found */
class _anm1 {}
);
new _anm1();
}
答案 1 :(得分:0)
我找到了解决方案(通过命中和试用)
实际上,Progaurd以一种方式混淆,所有方法都被重命名为a,b,c和更简单的名称。包括主方法在内的所有方法都会发生这种情况(如上所示)。因此,在从jar文件中提取后(使用Winrar或类似的实用程序)打开混淆的类(使用反编译器,我更喜欢Cavaj Decompiler)。编辑文件并将main方法重命名为
public static void main(String[]args)
保存已编辑的类文件,它将保存为Java文件。编译它,并将其放回JAR文件中(使用Winrar)。
现在执行类文件。如果类文件不起作用,请编辑Manifest,因为在混淆后重命名了类(有时是包),并且这些更改不会反映在Manifest中。
这对我有用,如果有人还在面对任何问题,请发表评论。
答案 2 :(得分:0)
默认情况下,ProGuard会重命名甚至删除代码中的所有类,字段和方法。您需要保留代码的入口点。在简单应用程序的情况下,入口点是主类及其主要方法。在ProGuard配置中:
-keep public class mypackage.MyMain {
public static void main(java.lang.String[]);
}
请参阅ProGuard手册> Introduction
请参阅ProGuard手册>例子> A typical application