2015-04-04 129 views
2

我使用ProGuard来混淆可执行文件.jar。当我使用Procyon反编译代码时,带有main方法的类仍然有它们的原始名称。这是由于使用主要方法混淆类名

-keepclasseswithmembers public class * { 
    public static void main(java.lang.String[]); 
} 

在默认配置。

如果我删除它,ProGuard将不会处理。有没有办法使用主要方法来混淆类名称,还是有很好的理由来对付它?

回答

2

如果使用main方法对类名称进行混淆,则不能再调用该类来运行该jar。

从理论上讲,您可以修改jar中的MANIFEST.MF来引用混淆的类名,但我不确定这样做的好处,因为它非常清楚您在那个时候调用了什么。

此外,你可以从来没有混淆了main(String[])方法名称本身,或Java根本无法找到并运行你的应用程序。这是反对:)

如果你想混淆类成员的其余,但保留类名和主要方法本身,你可以做一个很好的理由,与

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

first example in proguard manual