【问题标题】:Error Starting xxx: Module 'xxx-4' has verification error 3337. (Codfile version 78) in Blackberry?错误开始 xxx:模块“xxx-4”有验证错误 3337。(Codfile 版本 78)在 Blackberry 中?
【发布时间】:2012-08-13 22:45:47
【问题描述】:

我使用 JRE5.0 实现了一个黑莓应用程序,它可以在任何具有 OS5.0 和 OS6.0 的设备上运行良好
当我尝试在具有 OS 7.0 的 9900 上打开相同的应用程序时,出现以下错误:

启动 myAppName 时出错:模块“MyAppName-4”有验证错误 3337.(代码文件版本 78)


其中 myAppName 是应用程序名称(鳕鱼文件的名称)

如下图所示:



我检查了事件记录器,这里包含的内容(从旧到新):

  • 系统 - VM:LINK MyAppName
  • 系统 - VM:VECPs=my.Package.Name.Containing.Screens
  • 系统 - VM:VECCs=oneOfMyScreenClassNames
  • 系统 - VM:VECMm=functionInOneOfMyClasses()
  • 模块“MyAppName-4”出现验证错误 3337(codfile 版本 78)
  • 链接器错误:MyAppName 的“VerifyError”
  • 启动 myAppName 时出错:模块“MyAppName-4”有验证错误 3337(codfile 版本 78)
    这里是内容:
  • E 系统 - JVM:INFOp=2100000a,a='7.0.0.296',o='4.0.0.127',h=7001204

【问题讨论】:

标签: blackberry rim-5.0


【解决方案1】:

对于那些感兴趣的人,我找到了解决方案。

在日志中有:

a System - VM:VECCs=oneOfMyScreenClassNames
a System - VM:VECMm=functionInOneOfMyClasses()

我在日志中指示的整个班级“oneOfMyScreenClassNames”中执行了后续步骤

步骤如下:

  1. 如果您从构建 Java 存档 (JAR) 文件开始,然后使用 RIM 应用程序编译器 (RAPC) 创建 .cod 文件,请确保在构建 JAR 文件时关闭混淆。 RAPC 编译器会执行自己的混淆,如果代码已经被混淆,则可能会出现问题。

  2. 删除任何 System.out.* 调用。这些通常在 BlackBerry 智能手机上不起作用,但它们可能会导致验证错误。

  3. 删除未使用的导入语句。

  4. 明确指定每个函数或变量的访问权限。例如,确保将每一项都指定为公共、私有或受保护。

  5. 如果您使用的是 MIDlet,请确保将 MIDlet 类声明为 public。

  6. 如果 COD 文件已损坏或未正确签名,则可能会出现验证错误。确保您执行干净的重建并重新签署您的应用程序。在 BlackBerry 智能手机上重新安装应用程序。

  7. 注释掉任何不可执行的代码。验证错误可能与主代码文件和库文件的大小有关。如果您注释掉不可执行的代码,文件大小会发生变化,这可能会解决问题。

  8. 如果您创建了任何从 RIM 类继承的类,请更改您在这些类中创建的任何自定义方法和成员的名称。这确保您没有在内部 RIM 类中命名任何方法或同名成员。

  9. 如果您的应用程序使用 BlackBerry® Device Software 3.8 或更高版本,则在使用早期的 BlackBerry® Java® Development Environment (BlackBerry JDE) 编译实现 javax.microedition.rms.RecordStore 类的应用程序时会出现验证错误高于 4.0 版。如果应用程序使用 RecordStore 类的 addRecordListener 或 removeRecordListener 方法,就会发生这种情况。要解决此问题,请使用 BlackBerry JDE 4.0 或更高版本重新编译应用程序。

  10. BlackBerry® Java® Virtual Machine (BlackBerry JVM) 如何在另一个类的构造函数中直接处理一个类的引用存在问题。下面是一个例子: Class1 class1= new Class1(Class2.class.getName());要解决此问题,请不要在构造函数中进行类调用

  11. 从内部类中删除对静态实例变量的引用。有几种方法可以删除这些引用,例如在外部类中为 var 创建 get/set 方法或修改逻辑以将 MyInnerClass 拉出 MyOuterClass。

  12. 构建过程通常使用 javac 命令从 java 源文件编译,然后运行 ​​preverify.exe 文件,然后运行 ​​RAPC。将以下命令行参数添加到 javac 以帮助避免早期版本的 RAPC 中出现问题: javac.exe -source 1.3 -target 1.1

  13. 一些很长的方法可能会导致验证错误。通过将这些方法分解为辅助方法,您可以降低验证错误的可能性。

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

来源:http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800332/832062/Support_-_Preventing_verification_errors.html?nodeid=1499031&vernum=0

PS,我还删除了代码中的“instanceOf”用法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 2023-03-10
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多