gpt4 book ai didi

java - 使用 ProGuard 混淆代码

转载 作者:行者123 更新时间:2023-11-30 05:10:00 25 4
gpt4 key购买 nike

我选择了 ProGuard,以下是我配置它的选项:

收缩

选项:

  • 收缩

保留:

  • 应用
  • 小程序

同时保留:

  • 枚举
  • 数据库驱动程序
  • Swing UI L&F

混淆

选项:

  • 混淆(废话!:P)
  • 严重重载
  • 使用唯一的类成员名称
  • 使用混合大小写的类名
  • 扁平化包层次结构
  • 重新打包类

保留姓名:

  • native 方法名称
  • .class 方法名称

优化

选项:

  • 优化
  • 积极合并接口(interface)

删除:

  • [所有复选框均已选中]

信息

预验证和定位:

  • 预验证

一致性和正确性:

  • 注意配置中潜在的错误
  • 警告可能的错误输入
  • 跳过非公共(public)库类成员

当我拿起 jar 并将其放置为:

我在启动时收到此小程序错误:

    java.lang.RuntimeException: java.lang.NoClassDefFoundError: b        at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)        at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)        at java.lang.Thread.run(Unknown Source)    Caused by: java.lang.NoClassDefFoundError: b        at java.lang.Class.getDeclaredConstructors0(Native Method)        at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)        at java.lang.Class.getConstructor0(Unknown Source)        at java.lang.Class.newInstance0(Unknown Source)        at java.lang.Class.newInstance(Unknown Source)        at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)        at java.awt.event.InvocationEvent.dispatch(Unknown Source)        at java.awt.EventQueue.dispatchEvent(Unknown Source)        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)        at java.awt.EventDispatchThread.run(Unknown Source)    Caused by: java.lang.ClassNotFoundException: b        at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)        at java.lang.ClassLoader.loadClass(Unknown Source)        at java.lang.ClassLoader.loadClass(Unknown Source)        ... 14 more    Caused by: java.io.IOException: open HTTP connection failed:http://mystikrpg.com/b.class        at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)        at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)        at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)        at java.security.AccessController.doPrivileged(Native Method)        ... 17 more    Exception: java.lang.RuntimeException: java.lang.NoClassDefFoundError: b

Here is what is INSIDE the jar file BEFORE the obfuscation clientOffline.jar:

line_tile/
META-INF/

这是混淆到 newOne.jar 后该 jar 文件的内容:

line_tile/
META-INF/
weapon/
me.gif
a.class
b.class

我希望这足以帮助我解决这个问题。我做错了什么?

最佳答案

我猜 b.class 是从 GamePanel 内部类生成的。所以内部类可能存在问题。 Here Tom 在 Stackoverflow 上提到他无法正确混淆内部类。这里的建议也适用于这里:尝试使用 verbose=true (或使用 java -jar proguard.jar @myconfig.pro -verbose)进行混淆。

我还建议对 GamePanel 和/或tileOffline 使用 -keepnames 选项(请参阅 manual ),因为它会使这些类因混淆而保持不变(至少可以找到问题的根本原因)。

附注是尝试使用 CamelCase使用 Java 编程时的类名。

关于java - 使用 ProGuard 混淆代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com