签署Blackberry应用程序后为什么会出现KeyCodeNumber异常?

时间:2010-12-13 10:10:16

标签: blackberry signing

我们使用4.6代码签名工具签署了一个4.7 Blackberry应用程序。但是当第二次启动应用程序时,它会抛出'KeyCodeNumber异常'。

有人为什么我们得到这个例外的一些线索?

谢谢!

1 个答案:

答案 0 :(得分:1)

KeyCodeNumber异常与验证过程有关。

黑莓published an article描述了如何防止验证错误:

  

开发Java应用程序时   你可以使用BlackBerry智能手机   遇到以下任何一种情况   验证错误或错误类似   以下内容:

     

验证错误3141模块   'MyMIDlet'有验证错误   (&###>)偏移< ###>。错误   启动MyMIDlet:模块'MyMIDlet'   有验证错误(&####>)at   offset< ###&gt ;.“经常出现这些错误   在创建MIDlet时发生。他们是   本质上很难调试,因为   相同的错误消息可以应用于   问题的数量。

以下是防止或纠正验证错误的可能解决方案列表:

  1. 如果您从构建Java开始 归档(JAR)文件然后使用了 RIM应用程序编译器 (RAPC)创建.cod文件,make 确定你什么时候关闭混淆 构建JAR文件。 RAPC 编译器执行自己的 如果,可能会出现混淆和问题 代码已经被混淆了。
  2. 删除所有System.out。*调用。这些 通常什么都不做 黑莓智能手机,但他们 可能会导致验证错误。
  3. 删除未使用的导入语句。
  4. 明确指定访问权限 每个功能或变量。对于 例如,确保每一个都是 指定为public,private或 保护。
  5. 如果您正在使用MIDlet, 确保MIDlet类是 宣布为公众。
  6. 如果是,则可能会出现验证错误 COD文件已损坏或如果已损坏 没有正确签名。确保这一点 你执行一个干净的重建和那 你重新签署你的申请。 重新安装应用程序 黑莓智能手机。
  7. 注释掉任何不可执行的代码。 验证错误可能是相关的 到主代码文件的大小 和库文件。如果你 注释掉不可执行的代码, 文件大小更改,这可能会更正 问题。
  8. 如果您已创建任何类 继承自RIM类,改变 任何自定义方法的名称和 您在其中创建的成员 类。这确保了你 没有命名任何方法或 中的同名成员 内部RIM课程。
  9. 如果您的申请正在使用 BlackBerry®DeviceSoftware 3.8或 之后,会发生验证错误 当一个应用程序实现 该 javax.microedition.rms.RecordStore class是使用BlackBerry®编译的 Java®开发环境 (黑莓JDE)早于 版本4.0。如果发生这种情况 应用程序使用 addRecordListener或 removeRecordListener方法 RecordStore类。要解决这个问题 问题,重新编译应用程序 使用BlackBerry JDE 4.0或更高版本。
  10. 有怎样的问题  BlackBerry®Java®虚拟机  (BlackBerry JVM)处理  直接引用类  在另一个的构造函数内  类。以下是一个例子:  Class1 class1 = new  的Class1(Class2.class.getName());
  11. 要解决此问题,请不要在构造函数中进行类调用,如以下示例所示:

    Class1 class1;
    String className = Class2.class.getName();
    Class1 = new Class1(className);
    

    从内部类中删除对静态实例变量的引用。例如,以下代码示例可能会导致错误:

    public class MyOuterClass {
        static int var;
        class MyInnerClass {
            public void doSomething() {
                var = 7;
            }
        }
    }
    

    有几种方法可以删除这些引用,例如在外部类中为var创建get / set方法或修改逻辑以从MyOuterClass中拉出MyInnerClass。

    1. 正常构建过程 从java源文件编译 用javac命令,然后 运行preverify.exe文件然后 RAPC。添加以下命令行 javac的参数有助于避免 早期版本中的问题 RAPC:

      javac.exe -source 1.3 -target 1.1

    2. 一些很长的方法都可以 导致验证错误。通过 将这些方法分解为帮手 方法,你可以减少 验证错误的可能性。

    3. 虽然不太可能,但有些非常 长方法定义(10或10) 更多参数),有些很长 不变的定义(长包 结构和/或长名称)可以 也会导致验证错误。