如何使用 Proguard 的 GUI?保持正确的类不被混淆的问题

Posted

技术标签:

【中文标题】如何使用 Proguard 的 GUI?保持正确的类不被混淆的问题【英文标题】:How to use the GUI of Proguard? Problems with keeping the right classes from being obfuscated 【发布时间】:2014-09-14 13:25:14 【问题描述】:

我使用 Eclipse 来制作我的 Java 项目。 现在我制作了一个计算器并将其导出为可运行的 jar 文件。 这个计算器已经过老师的检查,它正在工作。 我可以发布完整的代码,但你看到它没有意义。

现在我试图混淆 .jar 文件。 我已经下载了 proguard 5.0 beta 2 来做到这一点。 在目录lib 中有一个名为proguardgui.jar 的文件。我使用这个 jar 文件来处理我的文件。

只要我不使用以下选项之一:优化、缩小或混淆,输出文件就会运行并显示我的计算器。但只要我想使用 proguard 的这些选项之一(优化,缩小或混淆),输出文件不再运行。

main 方法在 cal.SwingCalculator 中,所以我添加了 cal.SwingCalculator 来保留额外的类名和类成员名。但它仍然不起作用。 (我已经在屏幕底部添加了cal.SwingCalculator 优化、收缩和混淆)

例如当我只使用混淆时,输出文件仍然会更改主方法的名称。我使用了 Java 反编译器来检查结果。

输出文件怎么可能不工作?

当我添加需要保留的类名时,是否需要勾选 access 选项卡下的所有复选框,或者是否可以将其设置为不关心?

我做了这个视频中提到的所有事情: https://www.youtube.com/watch?v=vTgWPiRUCu4

# package cal; 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class SwingCalculator 
 public static void main(String[] args) 
 JFrame frame = new Calculator();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);
  

以及其他类的一部分:

package cal;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class Calculator extends JFrame Lots of code

【问题讨论】:

如果你从命令行启动你的jar,错误信息是什么意思? 【参考方案1】:

由于您有一个带有 main 方法的传统 Java 应用程序,您需要确保选中 ProGuard GUI 中的此复选框:

(选项卡)收缩 >(面板)保留 >(复选框)应用程序

它保留所有具有主要方法的类,以及主要方法本身。

【讨论】:

以上是关于如何使用 Proguard 的 GUI?保持正确的类不被混淆的问题的主要内容,如果未能解决你的问题,请参考以下文章

正确的 Proguard 配置以保持静态内部类

如果在proguard中包含带有注释的字段,如何保持类的成员不受影响

Android Proguard - 如何保持仅从 XML 布局引用的 onClick 处理程序

ProGuard 的“保持”论点的概括

Proguard 混淆时保持类“实现”

在混淆时我是不是需要在 proguard 规则中“保持” Parcelable