启动xxx时出错:模块'xxx-4'在Blackberry中有验证错误3337.(Codfile版本78)?

时间:2012-08-09 11:51:29

标签: blackberry rim-5.0

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

  

启动myAppName时出错:模块“MyAppName-4”出现验证错误   3337.(Codfile版本78)


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

如下图所示:

enter image description here

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

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

1 个答案:

答案 0 :(得分:0)

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

在日志中有:

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

我在日志中指示的全部类“oneOfMyScreenClassNames”中执行了后续步骤

以下是步骤:

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

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

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

  4. 明确指定每个函数或变量的访问权限。例如,确保将每个指定为public,private或protected。

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

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

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

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

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

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

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

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

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

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

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

    PS,我还删除了代码

    中的“ instanceOf ”用法