繁体   English   中英

Proguard输出JAR文件无法执行

[英]Proguard output JAR file cannot be executed

我已经使用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());
}

我没有选中混淆选项卡中的所有选项,但还是没有运气! 有什么帮助吗?

我没有测试过,但是我读到Proguard删除了未使用的类。 尝试这种方式-也许有帮助:

public static transient void main(String args[])
{
    SwingUtilities.invokeLater(new  Object()     /* anonymous class not found */
    class _anm1 {}
    );
    new _anm1();
}

我已经找到了解决方案(按命中和试用)

实际上,Progaurd的混淆方式是将所有方法重命名为a,b,c和更简单的名称。 对于包括主方法在内的所有方法,都会发生这种情况(如上所示)。 因此,从jar文件中提取(使用Winrar或类似实用程序)后,打开混淆的类(使用反编译器,我更喜欢Cavaj Decompiler)。 编辑文件并将主方法重命名回

public static void main(String[]args)

保存已编辑的类文件,它将另存为Java文件。 对其进行编译,然后将其放回JAR文件中(使用Winrar)。

现在执行类文件。 如果类文件不起作用,请编辑清单,因为混淆后会重命名类(有时是包),而这些更改不会反映在清单中。

这对我有用,请评论是否有人仍然遇到任何问题。

默认情况下,ProGuard重命名甚至删除代码中的所有类,字段和方法。 您需要保留代码的入口点。 在简单应用程序的情况下,入口点是主类及其主要方法。 在您的ProGuard配置中:

-keep public class mypackage.MyMain {
    public static void main(java.lang.String[]);
}

请参阅ProGuard手册> 简介

请参阅ProGuard手册>示例> 典型应用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM