【问题标题】:Can obfuscation (proguard) lead to MIDlet malfunction?混淆(proguard)会导致 MIDlet 故障吗?
【发布时间】:2010-06-03 22:35:30
【问题描述】:

我试图用 proguard 混淆 Java MIDlet。它在 PC 上运行正常,但是,当我在手机上运行它时,程序打开,连接到服务器,然后冻结。如果我禁用混淆,它会在手机上再次运行正常。我已经尝试了应用程序的所有混淆级别(NetBeans 的 7、8 和 9),但它们似乎都不能正常工作,我无法在没有混淆的情况下发布这个应用程序以供商业使用。此外,编译器会抛出一些警告:

Note: duplicate definition of library class [java.io.ByteArrayOutputStream]
Note: there were 14 duplicate class definitions.

但我不知道这是否真的是问题所在。有谁知道出了什么问题?下面列出了混淆器参数:

Obfuscator Arguments (7):
    -dontusemixedcaseclassnames
    -default package ''
    -keep public class ** {
        public *;
    }

Obfuscator Arguments (8): same as (7) plus -overloadaggressively.

Obfuscator Arguments (9): same as (8) but
    -keep public class ** extends javax.microedition.midlet.MIDlet {
        public *;
    }
instead.

谢谢。

【问题讨论】:

    标签: obfuscation java-me midlet


    【解决方案1】:

    混淆可以破坏东西。如果没有固定的示例代码,很难准确地说出可能出了什么问题。 可能出错的一个例子是,如果您在代码中按名称加载一个类 - 混淆的类将具有不同的名称,因此不会被发现。

    你提到的消息could be indicative of the problem - 你必须在你的路径上不止一次地拥有这些课程。 您提到的那个课程是否与您遇到问题的连接相关?仔细查看正在使用的 jar,并确保在您的应用程序中包含正确(和最少)的类集。 CLDC 中的 ByteArrayOutputStream 与桌面 JDK 中的不同。

    【讨论】:

    • 是的,我知道没有代码很难找到问题,但我不知道是代码的哪一部分导致了这个问题,因为系统中有很多类,我不能全部粘贴他们在这里。我显示警告的最后两行,因为这些类似乎太笼统,无法提示错误在哪里,例如:注意:库类的重复定义 [javax.microedition.media.control.VolumeControl],而且我的应用程序中什至没有声音或任何类型的媒体...如您所指,我会看看是否有某种外部调用可能导致这种情况,谢谢。
    • @eMgz - 是否可以将代码简化为一个非常短的 sn-p 显示相同的冻结? (即使要发布的代码太多,也可能会帮助您解决问题。)
    • 我不这么认为,有很多类可以处理记录存储、连接、线程、图像等,但我尝试使用-keep选项一一调试。还是谢谢。
    • 好的,记录一下:proguard.sourceforge.net/manual/troubleshooting.html#runtime 问题出在优化上。由于某种原因,它搞砸了一个应该调用另一个屏幕的线程,因此,使用 -dontoptimize 可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多