[解決済み] NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
2022-04-23 04:50:20
質問
Android 4.2 を搭載した Samsung デバイスの Android appcompat v7 ライブラリに問題があります。開発者コンソールに以下のようなスタックトレースが表示され、クラッシュが続いています。
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.widget.PopupMenu.<init>(PopupMenu.java:66)
at com.[my-package-name].CustomActivity$5.onClick(CustomActivity.java:215)
at android.view.View.performClick(View.java:4222)
at android.view.View$PerformClick.run(View.java:17620)
at android.os.Handler.handleCallback(Handler.java:800)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5391)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
CustomActivity.javaの215行目です。
PopupMenu popup = new PopupMenu(CustomActivity.this, mImageViewMenu);
クラッシュは様々なデバイスから発生していますが、常にサムスン、そして常にAndroid 4.2です。
ウェブで検索すると、多くの人が同じ問題を抱えていると思われます。私がこの問題を解決するために試した手順の一部を紹介します。
- Androidプロジェクトのプロパティを確認し、appcompatライブラリが正しく追加されていることを確認します。
- Java Build Path OrderとExportプロジェクトのプロパティを確認し、Android DependenciesとAndroid Private Librariesにチェックが入っていることを確認します。
- クラスがライブラリ(android.support.v7.internal.view.menu.MenuBuilder)に含まれることを確認します。
- R.javaがandroid.support.v7.appcompatのgenディレクトリにあることを確認する。
- Manifest.xmlアクティビティにAppCompatのテーマが含まれていることを確認します。
- プロジェクトをクリーンアップして再構築します。
これらの手順にもかかわらず、また、他のすべてのデバイスとAndroidバージョンで動作しているにもかかわらず、クラッシュレポートはまだ届いています。
解決するには?
EDIT
私の場合、これを置き換えることで解決しました(プロガードを使用)。
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }
をこれを使って
# Allow obfuscation of android.support.v7.internal.view.menu.**
# to avoid problem on Samsung 4.2.2 devices with appcompat v21
# see https://code.google.com/p/android/issues/detail?id=78377
-keep class !android.support.v7.internal.view.menu.**,android.support.** {*;}
クレジットが googleグループ、#138 .
古い回答(Temporary Workaround)です。 プロジェクトで でのスピナー ActionBarです。私の解決策は、それらの条件をチェックし、アプリのフローを変更することでした。
public static boolean isSamsung_4_2_2() {
String deviceMan = Build.MANUFACTURER;
String deviceRel = Build.VERSION.RELEASE;
return "samsung".equalsIgnoreCase(deviceMan) && deviceRel.startsWith("4.2.2");
}
そして、アクティビティのonCreateメソッドで。
if (isSamsung_4_2_2()) {
setContentView(R.layout.activity_main_no_toolbar);
} else {
setContentView(R.layout.activity_main);
}
ご指摘の通り、これは決定的な解決策ではなく、より恒久的な解決策が見つかるまでの間、ユーザーが限られた機能にアクセスできるようにする方法に過ぎません。
関連
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
final, finally, finalizeの違いについて話してください。
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
linux run jarfile Invalid or corrupt jarfile error.
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン