我如何使用 ProGuard 进行良好的混淆处理?

How can i have a good obfuscatig with ProGuard?

我正在使用 ProGuard 来混淆我的 Java 代码。
它正在工作,但是当我混淆时,ProGuard 唯一做的就是将变量和 class 名称更改为 "a"、"b"、"c" 等...
我可以有更多的选择吗 :
- 将所有代码放在一行中。
- 将所有 classes 放在同一个文件中。
- 像这样修改我的代码结构(从简单条件到困难条件):

private int maxStrLen(Noeud<E> x){
    return x == null ? 0 : Math.max(5, Math.max(6, maxStrLen(7)));
}

-等等... ?

PS : 我已经看过这里了 : link.

  • 将所有代码放在一行中。

    这不会导致任何 "better" 混淆。许多读者和编辑器都实现了换行,因此这根本不会导致任何改进的混淆。要回答你的问题,否(见下文)

  • 将所有 class 放在同一个文件中。

    否,因为这与许多本机 Java 机制相冲突,例如包保护级别、class 保护(最终等)。

  • 像这样修改我的代码结构(简单条件到困难条件)

不,那不可能,因为编译器必须遵循确定性行为。在像 Java 这样充满副作用的语言中,您不能保证对 Math.rand 的随机调用绝对不会影响 运行 程序的行为。不可能。