Les bibliothèques ne sont plus ajoutées à l'APK après la mise à niveau vers ADT 22

238

J'ai un assez gros projet d'application Android qui fait référence à plusieurs projets de bibliothèque. Tout allait bien jusqu'à ce que je mette à jour le plugin eclipse ADT vers la dernière version (v22). J'ai également mis à niveau le SDK bien sûr. Je ne vois aucune erreur de compilation dans Eclipse, mais lorsque j'exécute le projet sur le téléphone, j'obtiens un NoClassDefFoundError.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

La bibliothèque arca est incluse dans l'un des projets de bibliothèque référencés (dans le dossier libs) et je peux le voir dans les "bibliothèques privées Android" dans l'explorateur de packages, également comme je l'ai dit, aucune erreur de compilation. Le projet fonctionne bien sur l'ordinateur de tous les autres utilisateurs qui n'ont pas mis à niveau ADT.

J'ai déjà essayé tout un tas de choses, y compris mais sans s'y limiter:

  • réinstaller le SDK Android
  • télécharger un nouveau pack ADT
  • supprimer tout mon code et le récupérer de git
  • copier la bibliothèque en question dans le projet d'application
  • commenter le code qui utilise cette bibliothèque - je reçois juste la même erreur pour la bibliothèque suivante

le tout sans succès, donc je suis vraiment désespéré ici.

Je serais vraiment heureux si quelqu'un pouvait me donner un indice sur la façon de résoudre ce problème.

Simon dit
la source

Réponses:

337

Citant Streets of Boston de son post adt-dev :

Lors de la mise à niveau, la «Commande et exportation» des nouvelles «Bibliothèques privées Android» n'est pas toujours vérifiée. Et android-support-v4.jar est maintenant dans cette section 'Android Private Libraries'.

Pour résoudre ce problème, accédez à «Commander et exporter» et cochez «Bibliothèques privées Android». Ensuite, rafraîchissez / nettoyez / reconstruisez.

Après avoir effectué ce «correctif» pour un projet de bibliothèque, vous devrez peut-être simplement fermer et rouvrir tout projet dépendant, car ils peuvent ne pas voir ce «correctif» immédiatement.

Donnez-lui un coup de feu et avec de la chance, il résoudra votre problème.

entrez la description de l'image ici

CommonsWare
la source
32
CommonsWare est comme toujours l'un des premiers pionniers, merci beaucoup! :)
Paul Wein
1
Une toute nouvelle version ADT une nouvelle surprise;) J'espère que le nouveau système de construction sera meilleur. Merci
CommonsWare
3
Est-ce juste moi ou cela semble-t-il faux de demander à chaque développeur [qui utilise Eclipse et les bibliothèques] d'accéder à tous ses projets de bibliothèque et de marquer «Android Private Libraries» comme exporté? Cela me fait penser que nous avons tous confondu l'intention de Google d'ajouter cette nouvelle "fonctionnalité" en premier lieu. Peut-être que nous ne sommes pas censés marquer les bibliothèques comme exportées. Peut-être que nous sommes censés ajouter les fichiers jar manquants directement dans notre dossier "libs". Ex: Cela permettrait à mon projet de bibliothèque d'utiliser le dernier android-support-v4.jar [v13], tandis qu'ABS utilise en interne android-support-v4-12.jar.
swooby
2
@swooby: "Est-ce juste moi, ou est-ce que ça ne va pas que chaque développeur [qui utilise Eclipse et les bibliothèques] entre dans tous ses projets de bibliothèque et marque" Android Private Libraries "comme Exporté?" - c'est "faux" dans la mesure où c'est un bug, reconnu par les personnes qui ont écrit les outils. "Peut-être que nous sommes censés ajouter tout fichier jar manquant directement à notre dossier" libs "" - oh, vous devez le faire aussi, comme vous l'avez fait pour l'année et les changements passés. Cependant, vous devez toujours cocher cette case.
CommonsWare
9
@Phillip: AFAIK, ce sont tous des projets. Plus précisément, je suppose que ce sont tous les projets qui contiennent des éléments libs/, mais vous pouvez aussi les vérifier pour tous, au cas où vous ajouteriez des éléments libs/quelques mois plus tard et oublieriez cela.
CommonsWare
10

La simple vérification des bibliothèques privées Android ne suffisait pas, j'ai également dû installer les outils de création de SDK Android dans le gestionnaire de SDK Android.

Zaixer
la source
Je ne peux pas confirmer que cela est requis, mais je n'ai pas dépassé l'erreur que SimonSays a rencontrée avant de l'installer. Cela peut nécessiter uniquement un réglage correct des cases à cocher d'exportation comme décrit ci-dessus, mais j'ai pensé que je devais mentionner que j'avais fait le long du chemin pour installer les outils de construction.
strangeluck
cela fonctionne pour moi. il ne suffit pas de modifier les préférences d'éclipse.vous devrez peut-être consulter les outils de génération installés dans le gestionnaire de SDK Android.
Stevens
4

J'ai aussi eu le même problème et mon adtété 22.0.1. Et aucune des solutions ci-dessus n'a fonctionné. De plus, lors de l'ajout d'un projet de bibliothèque externe à un projet de travail, je vérifie toujours le gendossier du projet de travail et si le Rprojet de bibliothèque externe est là (avec le nom du package), alors seul le projet de bibliothèque externe est exporté. Et sur mon gendossier, aucune packagenamebibliothèque externe n'a été affichée.

J'ai donc vérifié sur le project.propertiesfichier et il n'y avait aucun lien de bibliothèque externe android.library.reference.1=présent. J'ai donc ajouté manuellement la référence de la bibliothèque externe là-bas, même si j'avais ajouté depuis project->properties->Java Build Path->Projects->Add. L'édition manuelle a donc project.propertiesfait tout le travail pour moi.

entrez la description de l'image ici

laaptu
la source
1
Je pense que cela s'est produit car la place de l'interface graphique à définir android.library.reference.nn'est pas java build path , mais plutôt project-> properties-> Android-> Library-> Add.... Un piège .
n611x007
4

J'ai rencontré un problème similaire, passé environ 3 heures, mais aucune des décisions proposées ici n'a pas aidé ... Enfin, j'ai trouvé une source du problème: mes fichiers de projet & project.properties étaient en lecture seule. Eclipse ignore simplement en silence toutes les modifications des dépendances de bibliothèque lorsque je le fais dans l'interface graphique!

RedSoft
la source
3

J'ai eu le même problème. C'était à cause du projet Eclipse. Pour le résoudre, j'ai créé un nouveau projet dans eclipse, copié mes classes de projet et ressources existantes dedans, puis relancé eclipse et ajouté mes inclusions personnalisées.

Asaf Pinhassi
la source
1
Trop de tracas, la solution de CommonsWare a fonctionné pour moi et je pense que cela aurait fonctionné pour vous aussi.
Bilthon
2

J'ai eu le même problème et ma réponse est légèrement différente de celle de CommonsWare. Voici ma capture d'écran:

entrez la description de l'image ici

Après avoir vérifié les bibliothèques dans ma build, j'ai recommencé à travailler.

Gilson
la source
2
Je serais prudent avec cette solution. Android Dependenciesa été remplacé par Android Private Librarieset pourrait ne pas être encore là pour des raisons héritées. Je suppose qu'il pourrait être supprimé à tout moment.
SimonSays
0

J'ai aussi eu le même problème,

i) ajouter gson lib comme librairies référencées
ii) le vérifier dans java Build Path http://i.stack.imgur.com/Gldhs.png

Jeremy Piednoel
la source