Il y a un problème avec la bibliothèque Android appcompat v7 sur les appareils Samsung exécutant Android 4.2. Je reçois des plantages avec la trace de pile suivante dans ma Developer Console:
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)
Il s'agit de la ligne 215 de CustomActivity.java:
PopupMenu popup = new PopupMenu(CustomActivity.this, mImageViewMenu);
Les plantages proviennent d'un large éventail d'appareils, mais toujours Samsung, et toujours Android 4.2.
Une recherche rapide sur le Web me porte à croire que de nombreuses personnes ont le même problème, certaines des étapes que j'ai essayées pour résoudre le problème sont:
- Vérifiez les propriétés du projet Android, assurez-vous que la bibliothèque appcompat est correctement ajoutée.
- Vérifiez l'ordre du chemin de construction Java et les propriétés du projet d'exportation, assurez-vous que les dépendances Android et les bibliothèques privées Android sont cochées.
- Confirmez que la classe est incluse dans la bibliothèque (android.support.v7.internal.view.menu.MenuBuilder).
- Vérifiez que R.java se trouve dans le répertoire gen pour android.support.v7.appcompat.
- Confirmez que le thème AppCompat est inclus dans l'activité Manifest.xml.
- Projet de nettoyage et de reconstruction.
Malgré ces étapes, et bien que cela fonctionne sur tous les autres appareils et versions d'Android, les rapports de plantage sont toujours disponibles.
java
android
eclipse
android-appcompat
Matt K
la source
la source
Réponses:
ÉDITER:
La solution qui a fonctionné pour moi était (Utiliser Proguard) pour remplacer ceci:
avec ça:
Le mérite revient au groupe Google, n ° 138 .
Ancienne réponse (solution de contournement temporaire): cela se produit dans un projet où j'utilise une
flèche dans l'ActionBar. Ma solution était de vérifier ces conditions et de modifier le flux de l'application:Ensuite, dans la méthode onCreate de l'activité:
Comme indiqué, ce n'est pas une solution définitive, c'est juste un moyen de permettre aux utilisateurs d'avoir accès à des fonctionnalités limitées pendant qu'une solution plus permanente est trouvée.
la source
java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.i
Comme # 150 des groupes Google dit
La meilleure solution consiste à ajouter les lignes suivantes à la place:
la source
-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.**,** {*;}
ne fonctionnait plus avec la v23 de la compatibilité de l' application .-keep class !android.support.v7.internal.view.menu.*MenuBuilder*, android.support.v7.** { *; } -keep interface android.support.v7.** { *; }
comme réponse :)Sur quel appareil vous rencontrez ce problème? (Samsung / HTC etc.)
Si c'est Samsung,
Divers téléphones Samsung sont inclus dans les anciennes versions de la bibliothèque de support Android dans le framework ou le classpath. Si vous utilisez la nouvelle bibliothèque de support matériel, vous verrez ce plantage sur ces appareils Samsung:
Pour résoudre ce problème, vous devez renommer cette classe. Le moyen le plus simple de le faire est d'exécuter proguard. Si vous ne voulez pas obscurcir, voici une ligne 1 pour renommer uniquement les classes incriminées:
Il y a un problème pour suivre ce problème, mais comme il s'agit vraiment d'un bogue Samsung, il ne sera jamais résolu de leur côté. Le seul moyen de résoudre ce problème du côté Google / AOSP est de renommer ces classes internes.
https://code.google.com/p/android/issues/detail?id=78377
la source
Ce problème est revenu à l'
AppCompat 23.1.1
endroit où le.internal
package a été supprimé du fichier jar de la bibliothèque.Comme suggéré dans les commentaires ci-dessus (merci aux personnes qui l'ont suggéré), la configuration proguard doit maintenant changer.
Pour que la réponse suggérée ci-dessus fonctionne à nouveau, essayez d'ajouter ces lignes à vos fichiers proguard:
Au lieu de l'ancien correctif:
la source
!android.support.v7.view.menu.**
est plus sûr grâce à d'autres classes telles que SubMenuBuilderSelon les derniers messages du rapport de bogue, cela devrait être corrigé sur la nouvelle version de la bibliothèque de support (24.0.0): https://code.google.com/p/android/issues/detail?id=78377 # c374
Quelqu'un a même prétendu que c'était réglé.
Cette version est disponible depuis le mois dernier , vous devriez donc la mettre à jour.
la source
Oui. Samsung connaît déjà ce problème. Je peux vous suggérer d'essayer d'utiliser la même implémentation de Popup de GitHub . Ce n'est pas la meilleure façon, mais ce sera des œuvres.
la source
J'avais le même problème de cette classe MenuBuilder introuvable en mode de débogage USB. J'ai résolu ce problème en définissant simplement le minifyEnabled sur true dans les blocs buildTypes release et debug de build.gradle . comme ça:
J'ai défini minifyEnabled sur true dans le type de débogage pour empêcher l'application de planter via le débogage USB sur un combiné en direct.
la source
J'ai activé proguard avec les propriétés proguard par défaut fournies avec un projet eclipse et le problème a été résolu pour moi. Sur la base de quelques commentaires ici https://code.google.com/p/android/issues/detail?id=78377 , certaines personnes pourraient devoir reconditionner en utilisant: -repackageclasses "android.support.v7"
la source
J'ai eu la même erreur en essayant d'exécuter une application «Hello World» sur ma tablette Samsung Galaxy Tab 3 via Android Studio. L'application semblerait se lancer, puis elle planterait instantanément et cette erreur s'afficherait dans la console d'Android Studio. J'ai fait une mise à jour du système sur la tablette et maintenant je suis capable d'exécuter l'application 'Hello World' et je ne reçois plus l'erreur. J'espère que cela aidera quelqu'un à résoudre son problème.
Remarque: la mise à jour du système que j'ai effectuée sur la tablette n'a pas mis à jour la version du système d'exploitation Android, car elle indique toujours que la version est 4.2.2.
la source
Changez la version Compile Sdk de votre projet en "API 18: (JellyBean)"
La valeur par défaut est "Lollipop
PAS
la source