Ada masalah dengan pustaka appcompat v7 Android pada perangkat Samsung yang menjalankan Android 4.2. Saya terus mogok dengan jejak tumpukan berikut di Konsol Pengembang saya:
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)
Ini adalah baris 215 dari CustomActivity.java:
PopupMenu popup = new PopupMenu(CustomActivity.this, mImageViewMenu);
Tabrakan datang dari berbagai perangkat, tetapi selalu Samsung, dan selalu Android 4.2.
Pencarian web cepat membuat saya percaya bahwa banyak orang memiliki masalah yang sama, beberapa langkah yang saya coba selesaikan adalah:
- Periksa properti proyek Android, pastikan pustaka appcompat ditambahkan dengan benar.
- Periksa properti proyek Java Build Path Order dan Ekspor, pastikan Android Dependencies dan Android Private Libraries dicentang.
- Konfirmasikan kelas termasuk dalam perpustakaan (android.support.v7.internal.view.menu.MenuBuilder).
- Confirm R.java terletak di direktori gen untuk android.support.v7.appcompat.
- Konfirmasi tema AppCompat termasuk dalam aktivitas Manifest.xml.
- Bersihkan dan bangun kembali proyek.
Terlepas dari langkah-langkah ini, dan meskipun bekerja pada semua perangkat lain dan versi Android, laporan kerusakan masih muncul.
java
android
eclipse
android-appcompat
Matt K
sumber
sumber
Jawaban:
EDIT:
Solusi yang berhasil bagi saya adalah (Menggunakan Proguard) untuk menggantikan ini:
dengan ini:
Kredit diberikan ke grup google, # 138 .
Jawaban lama (Solusi Sementara): Ini terjadi dalam proyek di mana saya menggunakan
pemintal diActionBar. Solusi saya adalah memeriksa kondisi tersebut dan mengubah aliran aplikasi:Kemudian dalam metode onCreate aktivitas:
Seperti yang ditunjukkan ini bukan solusi yang pasti, itu hanya cara untuk memungkinkan pengguna memiliki akses ke fungsi terbatas sementara solusi yang lebih permanen ditemukan.
sumber
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i
Seperti # 150 dari grup google mengatakan
Solusi yang lebih baik adalah tambahkan baris berikut sebagai gantinya:
sumber
-keep class !android.support.v7.internal.view.menu.* implements android.support.v4.internal.view.SupportMenu, android.support.v7.** {*;}
-keep class !android.support.v7.internal.view.menu.**,** {*;}
tidak bekerja lagi dengan v23 dari aplikasi compat .-keep class !android.support.v7.internal.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
sebagai jawabannya :)Di perangkat mana Anda menghadapi masalah ini? (Samsung / HTC dll.)
Jika itu Samsung,
Berbagai ponsel Samsung termasuk versi lama dari pustaka dukungan android dalam framework atau classpath. Jika Anda menggunakan pustaka dukungan materi baru, Anda akan melihat kerusakan ini di perangkat Samsung tersebut:
Untuk memperbaikinya, Anda harus mengganti nama kelas itu. Cara termudah untuk melakukannya adalah dengan menjalankan proguard. Jika Anda tidak ingin mengaburkan, berikut adalah 1 liner untuk mengganti nama hanya kelas yang menyinggung:
Ada masalah melacak masalah ini, tetapi karena ini benar-benar bug Samsung, itu tidak akan pernah diperbaiki pada akhirnya. Satu-satunya cara untuk memperbaikinya di sisi Google / AOSP adalah mengubah nama kelas-kelas internal ini.
https://code.google.com/p/android/issues/detail?id=78377
sumber
Masalah ini kembali
AppCompat 23.1.1
ketika.internal
paket dihapus dari tabung perpustakaan.Seperti yang disarankan dalam komentar di atas (memuji orang-orang yang menyarankannya di sana), sekarang juga konfigurasi proguard harus diubah.
Agar jawaban yang disarankan di atas berfungsi kembali, coba tambahkan baris ini ke file proguard Anda:
Sebagai ganti dari perbaikan lama:
sumber
!android.support.v7.view.menu.**
lebih aman karena kelas lain seperti SubMenuBuilderMenurut posting terakhir dari laporan bug, ini harus diperbaiki pada versi baru dari perpustakaan dukungan (24.0.0): https://code.google.com/p/android/issues/detail?id=78377 # c374
Seseorang bahkan mengaku sudah memperbaikinya.
Versi ini tersedia sejak bulan lalu , jadi Anda harus memperbaruinya.
sumber
Iya. Samsung sudah tahu tentang masalah ini . Saya dapat menyarankan Anda mencoba menggunakan implementasi Popup yang sama dari GitHub . Ini bukan cara terbaik, tetapi akan berhasil.
sumber
Saya mengalami masalah yang sama dengan kelas MenuBuilder ini yang tidak ditemukan dalam mode debugging USB. Aku memecahkan masalah ini dengan hanya menetapkan minifyEnabled untuk benar baik dalam rilis dan debug buildTypes blok build.gradle . seperti ini:
Saya mengatur minifyEnabled menjadi true dalam tipe debug untuk mencegah aplikasi mogok melalui USB debugging ke handset langsung.
sumber
Saya mengaktifkan proguard dengan properti proguard default yang disediakan dengan proyek gerhana dan masalahnya diperbaiki untuk saya. Berdasarkan beberapa komentar di sini https://code.google.com/p/android/issues/detail?id=78377 , beberapa orang mungkin harus dipaket ulang menggunakan: -repackageclasses "android.support.v7"
sumber
Saya mendapat kesalahan yang sama ketika mencoba menjalankan aplikasi 'Hello World' pada tablet Samsung Galaxy Tab 3 saya melalui Android Studio. Aplikasi akan muncul untuk diluncurkan dan kemudian akan crash secara instan dan kesalahan itu akan muncul di konsol di Android Studio. Saya melakukan pembaruan sistem pada tablet dan sekarang saya dapat menjalankan aplikasi 'Hello World' dan saya tidak mendapatkan kesalahan lagi. Saya harap ini membantu seseorang untuk menyelesaikan masalah mereka.
Catatan: Pembaruan sistem yang saya lakukan pada tablet tidak memperbarui versi OS Android, karena masih mengatakan bahwa versi tersebut 4.2.2.
sumber
Ubah Compile Sdk Version proyek Anda menjadi "API 18: (JellyBean)"
Defaultnya diatur ke "Lollipop
LANGKAH
sumber