Ajout d'une bibliothèque / JAR à un projet Android Eclipse

130

Il s'agit d'une question en deux parties sur l'ajout d'une bibliothèque tierce (JAR) à un projet Android dans Eclipse.

La première partie de la question est, lorsque j'essaie d'ajouter un JAR (bibliothèque) tiers à mon projet Android, je rencontre d'abord le problème de

Erreur d'analyse XML: préfixe indépendant

parce que j'essaye d'utiliser une classe de ce JAR (et j'ai besoin du préfixe défini d'une manière ou d'une autre). Que se passe-t-il?

Deuxièmement, (après avoir corrigé cela - la réponse est donnée ci-dessous), mon application ne fonctionne pas sur Android et je découvre via le débogueur (LogCat) que la classe que j'essaie de consommer n'existe pas.

Causé par: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

Pourquoi, lorsque je n'obtiens aucune erreur de compilation ou d'éditeur de liens dans Eclipse, a-t-il ce problème sur l'émulateur?

Ces deux questions sont rhétoriques car je vais y répondre moi-même ci-dessous. D'autres messages dans ce forum remontent au problème et ailleurs il y a des discussions, mais je pense que je peux être plus explicitement utile pour le prochain gars.

Russ Bateman
la source

Réponses:

316

Maintenant, pour le problème de la classe manquante.

Je suis un développeur Eclipse Java EE et j'ai l'habitude depuis de nombreuses années d'ajouter des bibliothèques tierces via le mécanisme "User Library" dans Build Path. Bien sûr, il y a au moins 3 façons d'ajouter une bibliothèque tierce, celle que j'utilise est la plus élégante, à mon humble avis.

Cela ne fonctionnera pas, cependant, pour Android, dont Dalvik "JVM" ne peut pas gérer une classe compilée Java ordinaire, mais doit la convertir dans un format spécial. Cela ne se produit pas lorsque vous ajoutez une bibliothèque comme je ne le ferai pas.

Au lieu de cela, suivez les instructions (largement disponibles) pour importer la bibliothèque tierce, puis ajoutez-la à l'aide de Build Path (qui la fait connaître à Eclipse à des fins de compilation). Voici l'étape par étape:

  1. Téléchargez la bibliothèque sur votre système de développement hôte.
  2. Créez un nouveau dossier, libs , dans votre projet Eclipse / Android.
  3. Cliquez avec le bouton droit sur les bibliothèques et choisissez Importer -> Général -> Système de fichiers, puis Suivant, Parcourir dans le système de fichiers pour trouver le répertoire parent de la bibliothèque (c'est-à-dire où vous l'avez téléchargée).
  4. Cliquez sur OK, puis sur le nom du répertoire (pas sur la case à cocher) dans le volet gauche, puis cochez le JAR correspondant dans le volet droit. Cela place la bibliothèque dans votre projet (physiquement).
  5. Faites un clic droit sur votre projet, choisissez Build Path -> Configure Build Path, puis cliquez sur l'onglet Libraries, puis Add JARs ..., accédez à votre nouveau JAR dans le répertoire libs et ajoutez-le. (C'est d'ailleurs le moment auquel votre nouveau JAR est converti pour une utilisation sur Android.)

REMARQUE

L'étape 5 peut ne pas être nécessaire, si la bibliothèque est déjà incluse dans votre chemin de construction. Assurez-vous simplement que son existence avant de l'ajouter.

Ce que vous avez fait ici accomplit deux choses:

  1. Inclut un JAR converti par Dalvik dans votre projet Android.
  2. Rend les définitions Java disponibles pour Eclipse afin de trouver les classes tierces lors du développement (c'est-à-dire de la compilation) du code source de votre projet.
Russ Bateman
la source
Russ, vous devriez probablement commencer une autre question distincte. Cette "réponse" semble un peu étrange assis ici.
Paul Gregoire
3
Donc, j'ai réécrit un peu certaines parties de la question. J'ai résisté à la tentation de faire la chose facile (ce que vous suggérez ici) parce que je pense vraiment que les deux problèmes découlent de la tentative d'ajout d'une bibliothèque tierce et je parie que quiconque a le deuxième problème aura probablement eu le premier aussi. Merci.
Russ Bateman
J'aurais aimé qu'il y ait quelque chose de plus explicite à ce sujet dans les documents Android formels (je ne suis pas encore tombé dessus) et d'autres réponses dans d'autres forums, mais ne résolvez jamais le problème. Notez que sur BlackBerry, ce même problème est un énorme cauchemar sans que personne ne donne d'informations fiables sur la façon de le résoudre - je ne sais pas ce que je vais faire là-bas.
Russ Bateman
2
Salut @RussBateman J'ai essayé les étapes que vous avez mentionnées ci-dessus et j'ai réussi à inclure le fichier jar de la bibliothèque dans mon projet Android et les classes de la bibliothèque étaient donc accessibles à mon projet au moment de la compilation.Mais lorsque je lance le projet, j'obtiens une erreur dans ma console: "La conversion au format Dalvik a échoué avec l'erreur 1" .. et mon projet ne serait pas lancé!
Zeba
Dans certaines circonstances, cela ne fonctionne pas ... Je ne me souviens pas exactement de ce que j'ai fait, j'ai supprimé le dossier libs, je l'ai lu ... maintenant fait tout ce que vous avez dit, ajoutez des libs, importez le fichier jar, ajoutez au chemin de construction ... Les erreurs du compilateur ont disparu, mais obtiennent toujours une exception d'exécution indiquant que la classe est introuvable :(
Ixx
20

Assurez-vous que vos fichiers JAR tiers se trouvent dans le dossier "libs" de vos projets et ils seront placés dans le fichier .apk lorsque vous empaquetez votre application. Vous pouvez voir des erreurs d'exécution sur l'appareil si quelque chose dans le fichier jar n'est pas pris en charge, mais à part cela, j'ai eu beaucoup de succès avec cela.

Paul Grégoire
la source
1
C'est une question d'expérience, j'ai déjà eu le même problème :)
Paul Gregoire
Merci Monsieur, mais ça craint de voir que le dossier libs a besoin de la copie des fichiers Jar externes que nous avons déjà dans le référentiel Maven ou quelque part.
asgs
1
Malheureusement, cela ne fonctionne plus automatiquement, vous devez également dire à eclipse d'inclure les bibliothèques dans les fichiers de package.
Neil Townsend
Quand cela a-t-il changé? C'est un énorme changement par rapport à ce à quoi nous sommes tous habitués.
Paul Gregoire
5

Configurer un projet de bibliothèque

Un projet de bibliothèque est un projet Android standard, vous pouvez donc en créer un nouveau de la même manière que vous le feriez pour un nouveau projet d'application.

Lorsque vous créez le projet de bibliothèque, vous pouvez sélectionner n'importe quel nom d'application, package et définir d'autres champs selon vos besoins, comme illustré dans la figure 1.

Ensuite, définissez les propriétés du projet pour indiquer qu'il s'agit d'un projet de bibliothèque:

Dans l'Explorateur de packages, cliquez avec le bouton droit sur le projet de bibliothèque et sélectionnez Propriétés. Dans la fenêtre Propriétés, sélectionnez le groupe de propriétés "Android" à gauche et recherchez les propriétés de la bibliothèque à droite. Cochez la case "is Library" et cliquez sur Apply. Cliquez sur OK pour fermer la fenêtre Propriétés. Le nouveau projet est désormais marqué comme projet de bibliothèque. Vous pouvez commencer à y déplacer le code source et les ressources, comme décrit dans les sections ci-dessous.

koke
la source
4

Si vous utilisez la version 22 d'ADT, vous devez vérifier les dépendances Android et les bibliothèques privées Android dans l'onglet Ordre et Exporter dans le chemin de construction du projet

ajaykoppisetty
la source
2

Tout d'abord, le problème du préfixe manquant.

Si vous consommez quelque chose dans votre fichier de mise en page qui provient d'un tiers, vous devrez peut-être également consommer son préfixe, quelque chose comme "droidfu:" qui se produit à plusieurs endroits dans la construction XML ci-dessous:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

Cela vient du JAR, mais vous devrez également ajouter le nouveau "xmlns: droidfu"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

ou vous obtenez l'erreur de préfixe indépendant. Pour moi, c'était un échec de copier et coller tous les exemples fournis à partir des pages de la bibliothèque tierce.

Russ Bateman
la source
1

Erreur d'analyse XML: préfixe indépendant

La ressource '/ playteddy / res' n'existe pas.

J'ai eu les deux erreurs ci-dessus et finalement je l'ai résolu.

Faites un clic droit sur votre projet -> propriétés -> chemin de construction java -> googleadmobadsdk (sélectionnez-le et placez-le en haut), puis vous exécutez et le problème est résolu. Il est résolu mon erreur d'exécution.

Sujan
la source
0

Placez la source dans un dossier en dehors de votre espace de travail. Faites un clic droit dans l'explorateur de projet et sélectionnez "Importer ..."

Importez le projet dans votre espace de travail en tant que projet Android. Essayez de le créer et assurez-vous qu'il est marqué comme projet de bibliothèque. Assurez-vous également qu'il est construit avec le support de l'API Google, sinon vous obtiendrez des erreurs de compilation.

Ensuite, faites un clic droit sur votre projet principal dans l'explorateur de projets. Sélectionnez les propriétés, puis sélectionnez Android sur la gauche. Dans la section bibliothèque ci-dessous, cliquez sur "Ajouter".

La bibliothèque mapview-balloons devrait maintenant être disponible pour être ajoutée à votre projet.

Maigre
la source
0

Accédez au chemin de construction dans eclipse, puis cliquez sur commander et exporter, puis vérifiez la bibliothèque / le pot, puis cliquez sur le bouton haut pour le déplacer en haut de la liste afin de le compiler en premier.

Sam Adamsh
la source