我使用JRE5.0实现了黑莓应用程序,它在任何使用OS5.0和OS6.0的设备上运行良好
当我尝试在具有OS 7.0的9900上打开相同的应用程序时,我收到以下错误:
启动myAppName时出错:模块“MyAppName-4”出现验证错误 3337.(Codfile版本78)
其中myAppName是应用程序名称(cod文件的名称)
如下图所示:
我检查了事件记录器,这里包含的内容(更旧到更新):
答案 0 :(得分:0)
对于那些感兴趣的人,我找到了解决方案。
在日志中有:
a System - VM:VECCs=oneOfMyScreenClassNames
a System - VM:VECMm=functionInOneOfMyClasses()
我在日志中指示的全部类“oneOfMyScreenClassNames”中执行了后续步骤
以下是步骤:
如果您首先构建Java Archive(JAR)文件,然后使用RIM应用程序编译器(RAPC)创建.cod文件,请确保在构建JAR文件时关闭模糊处理。 RAPC编译器执行自己的混淆,如果代码已经被混淆,可能会出现问题。
删除所有System.out。*调用。这些通常不会在BlackBerry智能手机上执行任何操作,但可能会导致验证错误。
删除未使用的导入语句。
明确指定每个函数或变量的访问权限。例如,确保将每个指定为public,private或protected。
如果您正在使用MIDlet,请确保将MIDlet类声明为public。
如果COD文件已损坏或未正确签名,则可能会出现验证错误。确保执行干净重建并重新签名应用程序。在BlackBerry智能手机上重新安装该应用程序。
注释掉任何不可执行的代码。验证错误可能与主代码文件和库文件的大小有关。如果您注释掉不可执行代码,则文件大小会发生变化,这可能会解决问题。
如果已创建从RIM类继承的任何类,请更改在这些类中创建的任何自定义方法和成员的名称。这可以确保您没有在内部RIM类中命名任何方法或同名成员。
如果您的应用程序使用的是BlackBerry®DeviceSoftware 3.8或更高版本,则在使用BlackBerry®Java®DevelopmentEnvironment(BlackBerry JDE)编译实现javax.microedition.rms.RecordStore类的应用程序时,会发生验证错误。比版本4.0。如果应用程序使用RecordStore类的addRecordListener或removeRecordListener方法,则会发生这种情况。要解决此问题,请使用BlackBerry JDE 4.0或更高版本重新编译应用程序。
BlackBerry®Java®VirtualMachine(BlackBerry JVM)如何直接在另一个类的构造函数中处理类的引用时出现问题。以下是一个例子: Class1 class1 = new Class1(Class2.class.getName());要解决此问题,请不要在构造函数中进行类调用
从内部类中删除对静态实例变量的引用。有几种方法可以删除这些引用,例如在外部类中为var创建get / set方法或修改逻辑以从MyOuterClass中拉出MyInnerClass。
构建过程通常使用javac命令从java源文件编译,然后运行preverify.exe文件,然后运行RAPC。将以下命令行参数添加到javac以帮助避免早期版本的RAPC中出现问题: javac.exe -source 1.3 -target 1.1
某些非常长的方法可能会导致验证错误。通过将这些方法分解为辅助方法,可以降低验证错误的可能性。
虽然不太可能,但是一些非常长的方法定义(包含10个或更多参数)和一些非常长的常量定义(长包结构和/或长名称)也会导致验证错误。
PS,我还删除了代码
中的“ instanceOf ”用法