1

Samsung および QMobile の特定のデバイスからのみ、Android モバイル アプリで NoClassDefFoundError がほとんど発生しません。

以下のコードを追加すると、エラーが検出されますか?

  //Check for Class not found error for Samsung 4.2.2 devices case
  try {
      Class.forName("android.support.v7.internal.view.menu.MenuBuilder");
  } catch (ClassNotFoundException e) {
      // Handle Exception by displaying an alert to user to update device firmware.
  }catch (NoClassDefFoundError e){
      // Handle Exception by displaying an alert to user to update device firmware.
  }

アプリがクラッシュすることなく NoClassDefFoundError をプロアクティブに検出する最良の方法は何ですか?

編集:

ドキュメントには、メソッドが以下の例外をスローすることが記載されており、については何も言及されていませんNoClassDefFoundError

Throws:
LinkageError - if the linkage fails
ExceptionInInitializerError - if the initialization provoked by this method fails
ClassNotFoundException - if the class cannot be located

質問を次のように言い換えることができます

Class.forName(String)クラスに「 Def NoClassDefFoundError」があるかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

0

try-catch は、例外を処理するための最良の方法だと思います (これNoClassDefFoundErrorは本質的にはそうです)。

しかし、単に結果に従うのではなく、これを引き起こしたものに対処する方が賢明かもしれません。NoClassDefFoundErrorは効果なので、飛び出さないようにするために何かできることがあるはずです。

あなたが言ったようにそれが図書館内で起こった場合、あなたができることは2つあります:

  • メンテナに報告する (これが本当にメンテナのミスだと思われる場合)、または
  • 結果 (例外) ではなく、原因を修正するようにしてください。NoClassDefFoundError通常、ライブラリに必要なものが不足していることを示します。さらに別のライブラリへの別の依存関係であろうと、おそらく他の何かであろうと。

ライブラリのドキュメントをさらに掘り下げてみてください。何かわかるかもしれません。

于 2016-03-08T11:20:01.817 に答える