Error Starting xxx: Module 'xxx-4' has verification error 3337. (Codfile version 78) in Blackberry?

StackOverflow https://stackoverflow.com/questions/11882805

  •  25-06-2021
  •  | 
  •  

Question

I've implemented a blackberry application using JRE5.0, it's running well on any device with OS5.0 and OS6.0
When I try to open the same application on 9900 which has OS 7.0, I got the following error:

Error Starting myAppName: Module 'MyAppName-4' has verification error 3337. (Codfile version 78)


where myAppName is the application name (name of the cod file)

as in the following image:

enter image description here

I checked the event logger, here what it contains (older to newer):

  • a System - VM:LINK MyAppName
  • a System - VM:VECPs=my.Package.Name.Containing.Screens
  • a System - VM:VECCs=oneOfMyScreenClassNames
  • a System - VM:VECMm=functionInOneOfMyClasses()
  • Module 'MyAppName-4' has verification error 3337 (codfile version 78)
  • Linker error: 'VerifyError' for MyAppName
  • Error starting myAppName: Module 'MyAppName-4' has verification error 3337 (codfile version 78)
    Here is the content:
    enter image description here
  • E System - JVM:INFOp=2100000a,a='7.0.0.296',o='4.0.0.127',h=7001204
Was it helpful?

Solution

For those who are interested, I found the solution.

In the logs there were:

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

I did the next steps in the whole class "oneOfMyScreenClassNames" indicated in logs

Here are the steps:

  1. If you started by building a Java Archive (JAR) file and then used the RIM Application Program Compiler (RAPC) to create .cod files, make sure you turn obfuscation off when building the JAR file. The RAPC compiler performs its own obfuscation and issues may occur if the code is already obfuscated.

  2. Remove any System.out.* calls. These generally do nothing on the BlackBerry smartphone, but they might cause verification errors.

  3. Remove unused import statements.

  4. Explicitly specify the access for each function or variable. For example, make sure each one is specified as public, private, or protected.

  5. If you are working with a MIDlet, make sure the MIDlet class is declared as public.

  6. Verification errors may occur if the COD file is corrupted or if it was not signed correctly. Make sure that you perform a clean rebuild and that you re-sign your application. Reinstall the application on the BlackBerry smartphone.

  7. Comment out any non-executable code. Verification errors might be related to the size of the main code file and the library files. If you comment out non-executable code, the file sizes change, which may correct the problem.

  8. If you have created any classes that inherit from RIM classes, change the name of any custom methods and members that you created in those classes. This makes sure that you have not named any methods or members of the same name in the internal RIM classes.

  9. If your application is using BlackBerry® Device Software 3.8 or later, verification errors occur when an application that implements the javax.microedition.rms.RecordStore class is compiled using BlackBerry® Java® Development Environment (BlackBerry JDE) earlier than version 4.0. This occurs if the application uses either the addRecordListener or removeRecordListener methods of the RecordStore class. To resolve this issue, recompile the application using BlackBerry JDE 4.0 or later.

  10. There is a problem with how the BlackBerry® Java® Virtual Machine (BlackBerry JVM) handles the referencing of a class directly within the constructor of another class. The following is an example: Class1 class1= new Class1(Class2.class.getName()); To work around this issue, do not make the class call within a constructor

  11. Remove references to a static instance variable from an inner class. There are a few ways you can remove these references, such as creating get/set methods for var in the outer class or modifying the logic to pull MyInnerClass out of MyOuterClass.

  12. The build procedure normally compiles from the java source file with the javac command, and then runs preverify.exe file and then RAPC. Add the following command line arguments to javac to help avoid issues in earlier versions of the RAPC: javac.exe -source 1.3 -target 1.1

  13. Some methods that are very long can cause verification errors. By breaking these methods into helper methods, you can reduce the likelihood of verification errors.

  14. Although not as likely, some very long method definitions (with 10 or more parameters), and some very long constant definitions (long package structure and/or long names) can also cause verification errors.

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

PS, I also removed "instanceOf" usage in code

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top