Hay un problema con la biblioteca de Android appcompat v7 en dispositivos Samsung con Android 4.2. Sigo teniendo bloqueos con el siguiente seguimiento de pila en mi Consola de desarrollador:
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)
Esta es la línea 215 de CustomActivity.java:
PopupMenu popup = new PopupMenu(CustomActivity.this, mImageViewMenu);
Los bloqueos provienen de una variedad de dispositivos, pero siempre Samsung y siempre Android 4.2.
Una búsqueda rápida en la web me lleva a creer que muchas personas tienen el mismo problema, algunos de los pasos que he tratado de resolver son:
- Verifique las propiedades del proyecto de Android, asegúrese de que la biblioteca appcompat se haya agregado correctamente.
- Compruebe las propiedades del proyecto Java Build Path Order y Export, asegúrese de que las dependencias de Android y las bibliotecas privadas de Android estén marcadas.
- Confirme que la clase está incluida en la biblioteca (android.support.v7.internal.view.menu.MenuBuilder).
- Confirme que R.java se encuentra en el directorio gen para android.support.v7.appcompat.
- Confirme que el tema AppCompat está incluido en la actividad Manifest.xml.
- Proyecto de limpieza y reconstrucción.
A pesar de estos pasos, y a pesar de que funciona en todos los demás dispositivos y versiones de Android, los informes de fallas aún se reciben.
java
android
eclipse
android-appcompat
Matt K
fuente
fuente
Respuestas:
EDITAR:
La solución que funcionó para mí fue (Usando Proguard) para reemplazar esto:
con este:
El crédito va al grupo de google, # 138 .
Respuesta anterior (solución temporal): sucede en un proyecto en el que uso una
ruleta en labarra de acciones. Mi solución fue verificar esas condiciones y cambiar el flujo de la aplicación:Luego, en el método onCreate de la actividad:
Como se señaló, esta no es una solución definitiva, es solo una forma de permitir a los usuarios tener acceso a una funcionalidad limitada mientras se encuentra una solución más permanente.
fuente
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i
Como dijo el # 150 de los grupos de google
La mejor solución es agregar las siguientes líneas en su lugar:
fuente
-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.**,** {*;}
ya no funcionaba con v23 de compatibilidad de aplicaciones .-keep class !android.support.v7.internal.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
como la respuesta :)¿En qué dispositivo estás enfrentando este problema? (Samsung / HTC, etc.)
Si es Samsung,
Varios teléfonos Samsung incluyen versiones anteriores de la biblioteca de soporte de Android en el marco o classpath. Si usa la nueva biblioteca de soporte de materiales, verá este bloqueo en esos dispositivos Samsung:
Para solucionar esto, debe cambiar el nombre de esa clase. La forma más fácil de hacerlo es ejecutar Proguard. Si no desea ofuscar, aquí hay un 1 liner para renombrar solo las clases ofensivas:
Hay un problema para rastrear este problema, pero dado que es realmente un error de Samsung, nunca se solucionará por su parte. La única forma de solucionarlo en el lado de Google / AOSP es cambiar el nombre de estas clases internas.
https://code.google.com/p/android/issues/detail?id=78377
fuente
Este problema volvió
AppCompat 23.1.1
cuando el.internal
paquete se eliminó del archivo jar de la biblioteca.Como se sugiere en los comentarios anteriores (créditos a las personas que lo sugirieron allí), ahora también la configuración de protección debe cambiar.
Para que la respuesta sugerida anteriormente vuelva a funcionar, intente agregar estas líneas a sus archivos de protección:
En lugar de la vieja solución:
fuente
!android.support.v7.view.menu.**
es más seguro debido a otras clases como SubMenuBuilderSegún las últimas publicaciones del informe de errores, esto debería corregirse en la nueva versión de la biblioteca de soporte (24.0.0): https://code.google.com/p/android/issues/detail?id=78377 # c374
Alguien incluso afirmó que lo arregló.
Esta versión está disponible desde el mes pasado , por lo que debe actualizarla.
fuente
Si. Samsung ya sabe sobre este problema. Puedo sugerirle que intente usar la misma implementación de Popup de GitHub . No es la mejor manera, pero serán obras.
fuente
Estaba teniendo el mismo problema con esta clase de MenuBuilder que no se encuentra en el modo de depuración USB. He resuelto este problema, simplemente definiendo el minifyEnabled a cierto tanto en la liberación y depurar buildTypes bloque de build.gradle . Me gusta esto:
Configuré minifyEnabled en verdadero en el tipo de depuración para evitar que la aplicación se bloquee a través de la depuración USB en un teléfono en vivo.
fuente
Habilité proguard con las propiedades de proguard predeterminadas proporcionadas con un proyecto de eclipse y el problema se solucionó para mí. Según algunos comentarios aquí https://code.google.com/p/android/issues/detail?id=78377 , algunas personas podrían tener que volver a empaquetarlas usando: -repackageclasses "android.support.v7"
fuente
Recibí el mismo error al intentar ejecutar una aplicación 'Hello World' en mi tableta Samsung Galaxy Tab 3 a través de Android Studio. La aplicación parece iniciarse y luego se bloquea instantáneamente y ese error se muestra en la consola en Android Studio. Hice una actualización del sistema en la tableta y ahora puedo ejecutar la aplicación 'Hello World' y ya no recibo el error. Espero que esto ayude a alguien a resolver su problema.
Nota: La actualización del sistema que realicé en la tableta no actualizó la versión del sistema operativo Android, porque todavía dice que la versión es 4.2.2.
fuente
Cambie la versión Compile Sdk de su proyecto a "API 18: (JellyBean)"
El valor predeterminado se establece en "Lollipop
PASOS
fuente