我使用ProGuard
来混淆可执行文件.jar
。当我使用Procyon
反编译代码时,带有main方法的类仍然具有其原始名称。这是由于
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
在默认配置中。
如果我删除它,ProGuard不会处理。有没有办法用主要方法来混淆类名,还是有充分理由反对它?
答案 0 :(得分:2)
如果使用main方法对类名进行模糊处理,则无法再调用该类来运行jar。
理论上,你可以修改jar中的MANIFEST.MF
来引用混淆的类名,但是我不确定它的好处,因为你很清楚你在那时调用的是什么。
此外,您永远不会模糊main(String[])
方法名称本身,或者java根本找不到并运行您的应用程序。这是反对它的一个很好的理由:)
如果你想混淆类成员的 rest ,但保留classname和main方法本身,你可以用
来做-keep public class mypackage.MyMain {
public static void main(java.lang.String[]);
}