我正在使用 ProGuard
来混淆可执行的 .jar
文件。当我使用 Procyon
反编译代码时,带有主要方法的类仍然具有它们的原始名称。这是因为
-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}
在默认配置中。
如果我删除它,ProGuard 将不会处理。有没有办法用主要方法混淆类名,或者有充分的理由反对它吗?
最佳答案
如果使用 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 。
关于java - 使用主要方法混淆类名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29447441/