web-dev-qa-db-fra.com

NoClassDefFoundError - Eclipse et Android

Je ne parviens pas à exécuter une application Android qui, jusqu'à l'ajout d'une deuxième bibliothèque externe à son chemin de génération, fonctionnait correctement. Depuis que j'ai ajouté le bocal scoreninja, je reçois maintenant un NoClassDefFoundError lorsque j'essaie d'exécuter l'application.

Voici le message:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): Java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

Étant donné que tous les scripts de génération sont générés par les outils Android (?), Je ne sais pas ce que je peux faire d'autre à part nettoyer et reconstruire ou redémarrer Eclipse (j'ai déjà essayé les trois). Est-ce que quelqu'un sait comment je peux modifier cela?

194
Tom R

J'ai eu ce problème après avoir mis à jour ADT.

Je stockais tous mes fichiers JAR dans un dossier appelé "lib" et ajoutais les fichiers JAR au chemin de génération de la manière habituelle Eclipse. Cela a bien fonctionné jusqu'à ma mise à jour.

Après ma mise à jour, j'obtenais l'erreur NoClassDefFoundError d'une classe que je pouvais voir clairement incluse dans le fichier jar (vérification des classes ReferencedLibraries).

La solution consistait à supprimer mes fichiers JAR du chemin de génération et à renommer mon dossier "lib" en "libs". Ceci est une convention ant et semble être la manière dont le nouvel ADT trouve et inclut les bibliothèques dans un fichier .apk. Une fois que j'ai fait cela, tout a bien fonctionné.

234
John O'Connor

Je n'avais pas besoin de mettre la bibliothèque-jar dans assets ou lib (s), mais cochez seulement la case correspondant à ce jar dans Propriétés -> Java Chemin de construction -> "Ordre et exportation" (c'était énumérés auparavant, mais non sélectionnés)

100
Till

En ajoutant le fichier JAR externe à votre chemin de génération, vous ajoutez simplement le fichier JAR à votre package, mais celui-ci ne sera pas disponible au moment de l'exécution.

Pour que le pot soit disponible à exécution, vous devez:

  • Placez le pot sous votre dossier assets
  • Inclure cette copie du fichier jar dans votre chemin de construction
  • Accédez à l'onglet d'exportation dans la même fenêtre contextuelle.
  • Cochez la case en regard du nouveau pot ajouté
68
Anthony Forloney

J'ai eu ceci pour MapActivity. Construit dans Eclipse obtient NoClassDefFound dans le débogueur.

J'ai oublié d'ajouter la bibliothèque au manifeste, à l'intérieur de l'élément <Application>...</Application>

<uses-library Android:name="com.google.Android.maps" />
48
brian.clear

J'ai changé l'ordre des projets inclus (Eclipse/Configure Build Path/Order and Export). J'ai déplacé mes deux projets dépendants en haut de la liste "Commande et exportation". Il a résolu le problème "NoClassDefFoundError".

C'est étrange pour moi. Je n'ai pas entendu parler de l'importance de l'ordre des bibliothèques et des projets inclus. Android + Eclipse, c'est amusant :)

27
Andrew Krizhanovsky

Je ne sais pas si c'est lié, ou si vous cherchez encore une réponse, mais je suis tombé sur ce fil en essayant de rechercher la même erreur (mais peut-être pour des raisons différentes).

Je n'ai trouvé aucune solution en ligne, mais une réponse sur un fil similaire m'a fait réfléchir et a pris conscience que je devais probablement juste reconstruire (ou nettoyer) le projet.

Dans Eclipse, accédez à Projet => Nettoyer. Sélectionnez votre projet et Eclipse a semblé le réparer lui-même. Pour moi, cela a résolu le problème.

J'espère que cela t'aides.

15
Brian

J'ai rencontré le même problème. La raison en était que la bibliothèque que j'essayais d'utiliser avait été compilée avec un JDK 7 standard.

Je l'ai recompilé avec les options -source 1.6 -target 1.6 et cela a bien fonctionné.

13
assylias

La même chose a fonctionné pour moi: Propriétés -> Java Chemin de construction -> "Ordre et exportation" Intéressant - pourquoi cela n’est pas fait automatiquement? Je suppose qu'il manque un réglage. De plus, cela m'est arrivé après la mise à niveau du SDK.

7
vlad

John O'Connor a raison avec le problème. Le problème persiste avec l’installation d’ADT 17 et plus. Trouvé ce lien pour corriger l'erreur:

http://Android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

3
user1555123

Cliquez avec le bouton droit de la souris sur votre dossier de projet, recherchez Propriétés dans le chemin de construction Java et sélectionnez les fichiers JAR que vous voyez. ça a marché pour moi.

3
zacharia

J'ai eu cette même erreur avec ADT22. Résolu en vérifiant "Bibliothèques privées Android" dans les propriétés -> Java chemin de construction -> Ordre et exportation. Si vous utilisez des projets de bibliothèque, la même chose devrait être faite pour eux aussi.

2
prijupaul

J'ai tout essayé dans ce billet (et dans d'autres), et cela n'a pas fonctionné pour moi. Il s'agit de loin de la plus terrible mise à niveau d'ADT que j'ai subie et je ne pourrai jamais effectuer la mise à niveau sans une sauvegarde ADT fonctionnelle.

J'ai réussi à le résoudre en supprimant le projet, puis en l'ajoutant à nouveau à l'aide d'une sauvegarde source que j'avais.

2
Eli

Toutes les réponses existantes ne fonctionnent pas pour moi car mon cas est un peu différent. Il m'a fallu quelques heures pour le faire fonctionner. J'utilise Eclipse.

Mon projet Android inclut un autre projet normal Java 1.6, qui nécessite un fichier jar tiers. Le truc c'est:

  • inclure le fichier jar dans le projet normal Java pour qu'il soit compilé (uniquement), ne le cochez pas dans l'onglet "Commander et exporter"
  • copiez également ce fichier jar dans le dossier "libs" du projet Android afin qu'il soit disponible au moment de l'exécution

J'espère que cela aidera ceux qui ont des scénarios similaires comme le mien.

2
Donald

Parfois, cela se produit car jar, votre dépendance, est associé à la balise "uses-libary" dans votre fichier AndroidManifest.xml.

Assurez-vous également qu'il se trouve dans la balise "application".

Cordialement,

Ravi

1
Ravi Pandit

J'ai eu ce problème et cela a été causé par le fait de ne pas "exporter" la bibliothèque.Le problème était justement dû au fait que les fichiers .class de certaines classes ne sont pas disponibles lors de la création du fichier APK.Compile

Dans mon cas, j'utilisais la classe "CusrsorAdapter" et sous "JavaBuildPath-> Order and Export", je n'ai pas vérifié le support de la version V4. Une fois le problème sélectionné, le problème a disparu.

Pour vous assurer que vous obtenez une erreur noClassDefFound en raison de la raison ci-dessus, veuillez vérifier votre logacat, vous verrez une erreur de super classe inconnue au moment de l'exécution.

1
Sojan P R

vous devez parfois prendre tout le projet externe comme bibliothèque et pas seulement le fichier jar:

mon problème a été résolu en ajoutant l'ensemble du projet (dans mon cas, google-play-services_lib) en tant que bibliothèque et pas seulement le fichier jar. les étapes à suivre (de @ style réponse ):

  1. Fichier-> Nouveau-> Autre
  2. Sélectionnez Android Projet
  3. Sélectionnez "Créer un projet à partir d'une source existante"
  4. Cliquez sur le bouton "Parcourir ..." et naviguez jusqu'au projet souhaité.
  5. Terminer (maintenant le projet de barre d'actions dans votre espace de travail)
  6. Faites un clic droit sur votre projet -> Propriétés
  7. Dans Android-> Section de la bibliothèque, cliquez sur Ajouter.
  8. sélectionner le projet récemment ajouté -> Ok
1
dvrm

Essaye ça:-

Étape 1

Ajouter toutes les bibliothèques pour construire pat dans Eclipse (signifie que toutes les bibliothèques sont référencées par des bibliothèques)

Étape 2

Supprimez le fichier R.Java et construisez à nouveau le projet. Ne vous inquiétez pas, R.Java sera automatiquement recréé.

Chill :)

0
user1606195

j'ai passé deux jours à essayer de résoudre ce problème après avoir mis à jour ADT. Enfin, j'ai eu la chance d'obtenir ce post ici:

https://code.google.com/p/Android/issues/detail?id=55304

ce qui m'a conduit dans la bonne direction. Lorsque vous suivez la solution, n'oubliez pas de remplacer la bibliothèque de support Android de tous vos projets par la même version (supprimez-la et réinstallez-la dans les projets). j'espère que cela aide - bonne chance

0
Ron

J'ai essayé diverses choses et la cause de l'erreur dans mon cas était un conflit entre maps.jar et Google Api dans Java Build Path-> Libraries. Donc, quand j'ai enlevé le maps.jar cela a bien fonctionné.

Cordialement,

wahib

0
Wahib Ul Haq

assurez-vous que votre fichier jar se trouve dans le répertoire libs de votre projet, car vous utilisez une version plus récente d'ADT avec votre Eclipse.

0
samir

En réalité, vous avez atteint le fameux problème de limite de 64k, vous devez activer multidex.

Voici comment tu le fais. https://developer.Android.com/tools/building/multidex.html

0
Ashish Rawat

Cela me arrive assez souvent.

La dernière fois que je me souvenais bien, c'était parce que Eclipse ADT (édition spéciale Google) était commuté sur Android Studio, puis que l'utilisateur revenait en arrière. J'ai essentiellement essayé toutes les méthodes que je peux trouver sur stackoverflow et qui ne m'ont pas fonctionné.

Finalement, l'application a de nouveau fonctionné (plus de NoCalssDeffoundError) en basculant mon IDE sur Eclipse (Kepler) d'origine avec ADT.

0
tyolab

Si vous modifiez votre commande et exportez dans le chemin de génération de votre projet, cette erreur ne se produira pas. L’autre façon de le réaliser consiste à utiliser .classpath dans votre dossier de projet.

0
geekgugi

J'ai eu exactement le même problème ... Pour résoudre ce problème, je viens de retirer mes Android Bibliothèques privées dans le "chemin de construction" et de cliquer sur OK ... et quand j'ai ouvert à nouveau le "chemin de construction" qu'Eclipse avait à nouveau les ajouta de nouveau par lui-même, et puis cela a fonctionné pour moi;) ...

0
pkdkk

Si vous préférez savoir à quels fichiers la solution de contournement est liée, voici ce que j'ai trouvé. Changer simplement le fichier .classpath en

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.Android.ide.Eclipse.adt.Android_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.Android.ide.Eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.Android.ide.Eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Remplacez le fichier .classpath dans tous les projets de bibliothèque et dans le projet principal Android. Le fichier .classpath se trouve dans le dossier racine du projet Eclipse. Bien sûr, n'oubliez pas d'ajouter vos propres entrées classpath, si vous en avez (comparez-les avec votre version actuelle de .classpath).

Je pense que cela revient au même résultat que de parcourir les menus Eclipse comme expliqué ci-dessus dans Composavt-User (Eclipse/Configurer le chemin de construction/Commande et exportation).

0
arberg

La solution ici a fonctionné pour moi. Il suffit d'importer la bibliothèque dans le dossier libs, puis de modifier le fichier build.gradle, puis de le nettoyer avec gradlew.

0
gabr10

Si j'ai bien compris, votre projet ne montre aucune erreur, car vous avez inclus le bocal. Mais le fichier Jar ne sera pas utilisé lorsque votre projet sera "exporté" vers le périphérique. Essaye ça

Projet -> Propriétés

Chemin de construction Java/Commande et exportation

[✔] Votre pot

0
user3060608