2012-08-09 42 views
0

我實現了使用JRE5.0黑莓應用程序,它與OS5.0和OS6.0
任何設備上運行良好。當我試圖打開9900具有OS 7.0相同的應用程序,我有以下錯誤:
錯誤開始xxx:模塊'xxx-4'驗證​​錯誤3337.(Codfile版本78)在黑莓?

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


其中myAppName是應用程序名(鱈魚文件的名稱)

如下面的圖像中:

enter image description here

我檢查了事件記錄器,在這裏它包含的內容(新舊版本):

  • 一個系統 - VM:LINK MyAppName
  • 一個系統 - VM:VECPs = my.Package.Name.Containing.Screens
  • 一個系統 - VM:VECCs = oneOfMyScreenClassNames
  • 一個系統 - VM:VECMm = functionInOneOfMyClasses()
  • 模塊 'MyAppName-4' 具有驗證錯誤3337(codfile 78版)
  • 鏈接錯誤:「的VerifyError '爲MyApp命名
  • 錯誤起始myAppName:模塊 'MyAppName-4' 具有驗證錯誤3337(codfile 78版)
    這裏是內容:
    enter image description here
  • 評價體系 - JVM:INFOP = 2100000a,一個='7.0 .0.296',o ='4.0.0.127',h = 7001204
+0

你抓住了最壞的可用BB錯誤。沒有明確的解決步驟。請在這裏找到更多http://stackoverflow.com/questions/4459239/how-to-debug-a-blackberry-verification-error – 2012-08-09 12:32:19

回答

0

對於那些有興趣的人,我找到了解決方案。

在日誌中有:

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

我在全班同學 「oneOfMyScreenClassNames」 下一步原木

這裏表示的步驟是:

  1. 如果您首先構建Java歸檔(JAR)文件,然後使用RIM應用程序編譯器(RAPC)創建.cod文件,確保在關閉時關閉混淆構建JAR文件。 RAPC編譯器執行自己的混淆處理,如果代碼已被混淆,則可能會發生問題。

  2. 刪除任何的System.out。*電話。這些通常不會在BlackBerry智能手機上執行任何操作,但可能會導致驗證錯誤。

  3. 關掉不用的import語句。

  4. 顯式指定爲每個函數或變量的訪問。例如,確保每個指定爲公共,私人或受保護的。

  5. 如果您正在使用一個MIDlet工作,確保MIDlet類被聲明爲public。

  6. 如果COD文件損壞或簽名不正確,可能會發生驗證錯誤。確保您執行乾淨的重建,並重新簽署您的應用程序。在BlackBerry智能手機上重新安裝應用程序。

  7. 註釋掉任何不可執行的代碼。驗證錯誤可能與主代碼文件和庫文件的大小有關。如果註釋掉不可執行的代碼,則文件大小會發生變化,這可能會糾正問題。

  8. 如果您創建了任何繼承自RIM類的類,請更改您在這些類中創建的所有自定義方法和成員的名稱。這確保您沒有在內部RIM類中命名任何方法或名稱相同的成員。

  9. 如果您的應用程序使用的是BlackBerry®Device Software 3.8或更高版本,那麼當實現javax.microedition.rms.RecordStore類的應用程序使用BlackBerry®Java®Development Environment(BlackBerry JDE)編譯之前,會發生驗證錯誤版本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,我也刪除 「}這種」 使用代碼