0

JRE5.0を使用してブラックベリーアプリケーションを実装しました。OS5.0およびOS6.0を搭載したすべてのデバイスで正常に動作しています。OS7.0を搭載
した9900で同じアプリケーションを開こうとすると、次のエラーが発生します。

myAppNameの起動中にエラーが発生しました:モジュール'MyAppName-4'に検証エラー3337があります。(Codfileバージョン78)




ここで、myAppNameは、次の画像のように アプリケーション名(codファイルの名前)です

ここに画像の説明を入力してください

。イベントロガーを確認しました。ここに含まれるもの(古いものから新しいものへ):

  • システム-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
4

1 に答える 1

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. 各関数または変数のアクセスを明示的に指定します。たとえば、それぞれが public、private、または protected として指定されていることを確認してください。

  5. MIDlet を使用している場合は、MIDlet クラスが public として宣言されていることを確認してください。

  6. COD ファイルが破損している場合、または正しく署名されていない場合は、検証エラーが発生する可能性があります。クリーン リビルドを実行し、アプリケーションに再署名してください。アプリケーションを BlackBerry スマートフォンに再インストールします。

  7. 実行不可能なコードをコメントアウトします。検証エラーは、メイン コード ファイルとライブラリ ファイルのサイズに関連している可能性があります。実行可能でないコードをコメント アウトすると、ファイル サイズが変わり、問題が解決する場合があります。

  8. RIM クラスから継承するクラスを作成した場合は、それらのクラスで作成したカスタム メソッドとメンバーの名前を変更します。これにより、内部 RIM クラスで同じ名前のメソッドまたはメンバーを指定していないことが確認されます。

  9. アプリケーションが BlackBerry® Device Software 3.8 以降を使用している場合、バージョン 4.0 より前の BlackBerry® Java® Development Environment (BlackBerry JDE) を使用して javax.microedition.rms.RecordStore クラスを実装するアプリケーションをコンパイルすると、検証エラーが発生します。これは、アプリケーションが 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 メソッドを作成する、ロジックを変更して MyOuterClass から MyInnerClass を引き出すなど、これらの参照を削除する方法はいくつかあります。

  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 」の使用も削除しました

于 2012-08-13T14:45:47.170 に答える