Je rencontre souvent une erreur parmi mes utilisateurs. L'application se bloque lors du démarrage. Lorsque MainActivity est censé être chargé, la VM ne peut apparemment pas trouver la classe. Je ne peux pas comprendre pourquoi. L’architecture de l’application repose sur le fait qu’il existe un projet commun que ma version gratuite et ma version professionnelle utilisent. Je ne sais pas si c'est pertinent. Voir la trace de pile ci-dessous. Des pensées?
Java.lang.NoClassDefFoundError: com.Android.common.MainActivity
at com.mycompany.myapp.Splash.onCreate(Splash.Java:23)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1615)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1667)
at Android.app.ActivityThread.access$1500(ActivityThread.Java:117)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:935)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:130)
at Android.app.ActivityThread.main(ActivityThread.Java:3687)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:507)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:842)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: com.Android.common.MainActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.Android.maps.jar:/data/app/com.Android.pro-1.apk]
Edit: .__ Merci pour le commentaire ci-dessous, Richard. Maintenant, j'ai changé com.Android.Splash
en quelque chose d'autre. Ce n'était pas le vrai nom de classe de toute façon. Ma faute...!
J'ai eu le même problème, j'ai fait ce qui suit pour résoudre le problème.
gen - code automatisé dans le projet (à partir de dépendances et de références)
src - code source dans le projet
Il n'était pas nécessaire de redémarrer Eclipse. Cela a juste commencé à fonctionner.
Honnêtement, je n'ai jamais essayé "Outils Android> Propriétés du projet de réparation", parfois cela pourrait être la même chose. Je ne sais pas, je viens de faire ci-dessus après avoir vu le message d'erreur, en pensant que quelque chose ne va pas avec les chemins de construction.
Modifier
Plus tard, ce n’était pas suffisant, c’était à nouveau le cas. Puis j'ai "vérifié" toutes les dépendances listées dans cette vue. Maintenant cela fonctionne à nouveau. Jusqu'ici tout va bien. Je garderai cette mise à jour si elle échoue à nouveau.
FYI: lors de ma dernière tentative, j'ai essayé "Outils Android> Propriétés du projet de réparation", mais cela n'a pas fonctionné pour moi.
J'utilise actuellement le SDK 20.0.3 et aucune des solutions précédentes ne fonctionnait pour moi.
J'ai pu faire fonctionner les choses en
Cela entraînait la création de fichiers de classe Java compilés pour Dalvik VM au lieu de Java VM lors de la construction du projet Android. Cela permettait aux fichiers de classe Java du fichier jar de la bibliothèque Android de passer par la résolution lors de la création du projet Android .apk. Désormais, lors de l'exécution de l'application, les classes du projet Java ont été trouvées à la place d'une erreur Java.lang.NoClassDefFoundError.
Si vous souhaitez utiliser un fichier jar au lieu de lier la source, vous devez créer un projet Library Android. (Un projet Android dont la propriété est cochée dans Propriétés -> Android.) Vous devrez ensuite associer la source du projet Java au projet de bibliothèque Android, comme décrit ci-dessus, ou copier les fichiers source du dossier "src" de. Java Project dans le dossier "src" du projet Android Library. Construisez le projet de bibliothèque Android. Ensuite, vous pourrez copier le fichier jar du projet Android créé dans le dossier 'libs' du dossier Android car les fichiers de classe qu'il contient ont été compilés pour Davlik VM au lieu du fichier Java VM lorsque le projet Android a été construit. Cela permet aux fichiers de classe Java contenus dans le fichier jar de la bibliothèque Android de passer à la résolution lors de la création du projet .apk. Désormais, lorsque l'application sera exécutée, les classes de projet Java seront trouvées à la place d'une erreur Java.lang.NoClassDefFoundError.
Essayez d'aller dans Projet -> Propriétés -> Chemin de construction Java -> Ordre et exportation et assurez-vous que les bibliothèques privées Android sont cochées pour votre projet et pour tous les autres projets de bibliothèque que vous utilisez. J'ai eu la solution en suivant le lien ci-dessous NoClassDefFoundError Android Project ?
Juste au cas où cela aiderait quelqu'un, je ferais face au même problème. Mon fichier jar se trouvait dans le répertoire libs et le fichier jar a été ajouté au chemin de génération. Il lançait toujours cette exception.
Je viens de nettoyer le projet et cela a fonctionné pour moi.
Eclipse -> Projet -> Nettoyer -> Sélectionner le projet et le nettoyer
J'ai essayé toutes les solutions ci-dessus mais je n'ai pas trouvé de solution,
Cette erreur est également générée lorsque vous créez une application qui utilise l'API Google (telle que Cartes) mais l'exécutez sur un appareil qui cible l'API Android.
J'ai rencontré cette erreur NoClassDefFoundError lorsque j'ai utilisé Java.nio.charset.StandardCharsets.
La raison en est que StandardCharsets n’existait pas avant JRE 1.7. Si je mets la version 1.7 de la compilation Java à la version 1.7, Eclipse s'est plaint que "Android requiert le niveau de conformité du compilateur 5.0 ou 6.0". Donc, je l'ai corrigé en faisant un clic droit sur le nom du projet -> Outils Android -> Propriétés du projet de réparation. Il est compilé avec JRE1.6.
Cependant, parce que StandardCharsets n’existait pas avant le 1.7. Il a signalé NoClassDefFoundError quand je l'ai exécuté.
Je ne me suis pas rendu compte de cela avant d’avoir essayé beaucoup d’autres méthodes, y compris la réinstallation de JDK. La vraie raison est clairement expliquée par la signification de NoClassDefFoundError: La classe n’est pas trouvée au moment de l’exécution, même si elle a passé la compilation.
La conclusion générale est que tant qu'Android ne fonctionne pas avec JRE 1.7, si vous utilisez une nouvelle fonctionnalité fournie depuis la version 1.7, vous rencontrerez cette erreur.
Ma solution est que j'ai copié ce code source dans mon code!
La description NoClassDefFoundError est, à partir de la balise SO:
Erreur Java générée si la machine virtuelle Java ou un chargeur de classe instance tente de charger la définition d'une classe (dans le cadre d'un appel de méthode normal ou dans le cadre de la création d'une nouvelle instance à l'aide de la nouvelle expression ) et aucune définition de la classe n'a pu être trouvée. Le La définition de classe recherchée existait lors de l'exécution de La classe a été compilée, mais la définition est introuvable.
Ou mieux:
NoClassDefFoundError en Java survient lorsque la machine virtuelle Java n'est pas capable de trouver une classe particulière au moment de l'exécution qui était disponible pendant temps de compilation.
de this page. Vérifiez, il y a quelques façons de résoudre l'erreur. J'espère que ça aide.
Dans mon cas, j’essayais d’ajouter une classe Java normale (d’un projet Java normal) compilée avec jre 1.7 à un projet d’application Android compilé avec jre 1.7.
La solution consistait à recompiler cette classe Java normale avec jre 1.6 et à ajouter des références au projet d'application Android (compilé avec jre 1.6 également), comme d'habitude (dans l'ordre de tabulation et l'exportation, vérifiez bien la classe, le projet, etc.).
Le même processus, lorsque vous utilisez une bibliothèque Android pour référencer des classes Java normales externes.
Je ne sais pas ce qui ne va pas avec jre 1.7 lors de la compilation de classes Java normales à partir d'un projet Java normal et essayez de les référencer dans des projets d'application ou de bibliothèque Android.
Si vous n'utilisez pas de classes Java normales (d'un projet Java normal), il n'est pas nécessaire de rétrograder à jre 1.6.
Pour moi, ce problème était lié à l’API que j’utilisais n’était pas déployée. Par exemple, j'ai utilisé un ZSDK_API.jar
comme référence.
Pour résoudre le problème, je devais faire un clic droit sur le projet et sélectionner les propriétés. De Java BUILD PATH, je devais ajouter l'API qui n'était pas déployée. C'était étrange car l'application lançait la classe MainActivity non trouvée et en réalité, l'erreur était due à l'absence de la classe DiscoveryHandler.
J'espère que cela aide quelqu'un.
Sur Android Studio:
1) Ajouter multiDexEnabled = true
dans votre configuration default
2) Add compile com.Android.support:multidex:1.0.0 dans vos dependencies
3) Application class
étendre MultiDexApplication
au lieu de simplement Application
J'ai rencontré NoClassDefFoundError pour une classe existant dans mon projet (pas une classe de bibliothèque). La classe existe mais j'ai eu NoClassDefFoundError. Dans mon cas, le problème était le support multidex. Le problème et la solution se trouvent ici: Multidex Android et bibliothèques de support
Vous obtenez cette erreur pour les versions Android inférieures à 5.0.
Autre idée… .. Par exemple, vous avez une classe dérivée de «Android.support.v4.app.Fragment».
Cependant, vous avez commis une erreur et l'avez héritée de "Android.app.Fragment". Ensuite, vous aurez cette erreur sur les appareils Android 2.
Je suppose que vous ne spécifiez pas la cible de javac
lors de la création de la bibliothèque commune, donc javac
utilise automatiquement la dernière cible disponible, qui est probablement 1.7 (Java7) ou 1.8 (Java8).
Il a déjà été dit que
Android requiert le niveau de conformité du compilateur 5.0 ou 6.0
dx
des outils de génération d'Android <19.0.0 n'est pas en mesure de convertir le bytecode Java7 (ou supérieur) en Daltik bytecode.
Vous pouvez donc utiliser une version>> 19.0.0 ou utiliser javac
avec -target 6 , en modifiant par exemple votre ant build.xml
comme ceci:
<javac
srcdir="src/"
destdir="build/"
target="6"
/>
Je viens de comprendre quelque chose avec cette erreur.
Assurez-vous simplement que le fichier JAR de la bibliothèque contient la classe R compilée dans le package Android.support.v7.appcompat et copiez toutes les résolutions dans le "projet" de support d'appcompat v7 dans votre dossier Android_SDK_HOME/extras/Android/support/v7/appcompat.
J'utilise Netbeans avec le plugin Android et cela a résolu mon problème.
Si rien de ce qui précède ne fonctionne (comme cela m'est arrivé) et que vous utilisez comme bibliothèque un autre projet dans Eclipse.
Faites ceci: Faites un clic droit sur projet -> Propriétés -> Android -> Bibliothèque -> Ajouter
C'est ce qui m'est arrivé! Ajout d'un projet en tant que bibliothèque (Propriétés du projet)
jars se trouvaient dans le dossier lib /, maintenant ils le sont dans libs / Si vous utilisez lib, vous pouvez les déplacer de lib en lib et supprimer les dépendances des propriétés du projet/chemin de génération Java, car Android trouvez-les automatiquement.
Solutions:
Activité à nouveau ajoutée au manifeste.J'ai essayé dans mon manifeste puis l'application a fonctionné.
<activity
Android:name="com.xxx.xxx.MainActivity"
Pour moi, le problème était que la bibliothèque référencée avait été construite avec Java 7. Je l'ai résolu en reconstruisant à l'aide du JDK 1.6.
J'ai résolu ce problème en ajoutant manuellement le chemin du projet de bibliothèque dans project.propertied. quelques comment Eclipse n'a pas ajouté cette entrée automatiquement avec "add project". Donc, le point où l'application essayait de référencer un composant dans le projet lib était en train de planter.
vous pouvez aussi essayer la même chose. dépendance de l'application dans projec.properties comme
Android.library.reference.1 = ....\Android-sdks\options\google\google_play_services\libproject/google-play-services_lib
et courir .
Quelque temps, Java.lang.NoClassDefFoundError: une erreur apparaît lors de l'utilisation de ART au lieu de l'exécution de Dalvik. Pour changer le runtime, allez simplement dans Developer Option -> Select Runtime -> Dalvik.
Essayez d'aller à
J'espère que ça aide.