我正在使用 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/

10-13 04:39