Comment puis-je utiliser des fichiers JAR externes dans un projet Android?

326

J'ai créé un projet Android et ajouté un JAR externe (hessian-4.0.1.jar) à mon projet. J'ai ensuite ajouté le JAR au chemin de génération et l'ai coché dans Order and Export.

L'ordre et l'exportation sont ignorés, semble-t-il, et toutes les classes du JAR externe sont manquantes au moment de l'exécution.

Existe-t-il une astuce pour inclure correctement les classes nécessaires à partir d'un JAR externe lors de la création d'une application Android à l'aide du plugin Eclipse? Je ne veux pas utiliser de fourmi ou de Maven.

AndroidSmoker74
la source
1
comme vous l'avez déjà découvert: cela est dû à des dépendances dans hessian-4.0.1.jar. Si vous souhaitez utiliser Hessian avec Android, utilisez Hessdroid ( code.google.com/p/hessdroid ). Pas très actif, mais fonctionne bien pour moi, même sur Android 4.0.
Ice09
1
Voir aussi "NoClassDefFoundError pour le code dans une bibliothèque Java sur Android" pour un problème courant lors de l'utilisation de fichiers jars externes. Solution simple .
Flow

Réponses:

443

Pour Eclipse

Un bon moyen d'ajouter des fichiers JAR externes à votre projet Android ou à tout projet Java est:

  1. Créez un dossier appelélibs dans le dossier racine de votre projet
  2. Copiez vos fichiers JAR dans le libsdossier
  3. Maintenant, faites un clic droit sur le fichier Jar, puis sélectionnez Build Path> Add to Build Path , ce qui créera un dossier appelé «Bibliothèques référencées» dans votre projet

    En procédant ainsi, vous ne perdrez pas vos bibliothèques référencées sur votre disque dur chaque fois que vous transférez votre projet sur un autre ordinateur.

Pour Android Studio

  1. Si vous êtes dans la vue Android dans l'explorateur de projets, remplacez-la par la vue Projet comme ci-dessous

Image manquante

  1. Cliquez avec le bouton droit sur le module souhaité dans lequel vous souhaitez ajouter la bibliothèque externe, puis sélectionnez Nouveau> Directroy et nommez-le comme ' libs »
  2. Copiez maintenant le blah_blah.jar dans les ' libs dossier '
  3. Cliquez avec le bouton droit sur le blah_blah.jar, puis sélectionnez « Ajouter en tant que bibliothèque .. ». Cela ajoutera et entrera automatiquement dans build.gradle en tant que fichiers de compilation ('libs / blah_blah.jar') et synchronisera le gradle. Et vous avez terminé

Remarque: si vous utilisez des bibliothèques tierces, il est préférable d'utiliser des dépendances transitives où le script Gradle télécharge automatiquement le JAR et le JAR de dépendance lors de l'exécution du script Gradle.

Ex: compilez 'com.google.android.gms: play-services-ads: 9.4.0'

En savoir plus sur Gradle Dependency Mangement

Vinayak Bevinakatti
la source
49
Notez que lorsque vous utilisez des versions récentes d'Eclipse / ADT, les libslib
fichiers JAR
4
@THelper - Merci! Vous avez raison, le dossier doit être nommé "libs" et non "lib". Je me cognais la tête sur ce problème.
Camille Sévigny
7
Dans les versions récentes du SDK, l'étape 3 (ajout manuel du JAR au chemin de génération) n'est pas nécessaire. Mais si vous avez un IDE, comme Eclipse ouvert au moment où vous déposez le fichier, vous devrez effectuer une actualisation du projet (F5 et / ou menu contextuel Actualiser dans l'explorateur de packages).
Jon Adams
4
Comment cela se fait-il à partir de la ligne de commande? Quel fichier de configuration dois-je modifier et comment?
Kristian Spangsege
13
Cette approche est obsolète depuis début 2012. Il suffit d'ajouter le JAR à libs/. Ne modifiez pas manuellement le chemin de génération.
CommonsWare
127

Oui, tu peux l'utiliser. Voici comment:

  1. Votre projet -> clic droit -> Importer -> Système de fichiers -> yourjar.jar
  2. Votre projet -> clic droit -> Propriétés -> Chemin de génération Java -> Bibliothèques -> Ajouter un pot -> yourjar.jar

Cette vidéo peut être utile si vous rencontrez des problèmes.

MannyNS
la source
5
Cette approche est obsolète depuis début 2012. Il suffit d'ajouter le JAR aux libs /. Ne modifiez pas manuellement le chemin de génération.
CommonsWare
J'ai essayé différentes façons d'ajouter un chemin de génération. Seulement de cette façon, je peux corriger l'exception de classe non trouvée après la migration d'un projet vers un autre PC
Mickey
La PREMIÈRE solution est obsolète et ne fonctionnera PAS AUSSI.
Yousha Aleayoub
5

J'utilise actuellement le SDK 20.0.3 et aucune des solutions précédentes n'a fonctionné pour moi.

La raison pour laquelle hessdroid fonctionne là où hess a échoué est que les deux fichiers jar contiennent du java qui est compilé pour différentes machines virtuelles. Le code d'octet créé par le compilateur Java n'est pas garanti pour s'exécuter sur la machine virtuelle Dalvik. Le code d'octet créé par le compilateur Android n'est pas garanti pour s'exécuter sur la machine virtuelle Java.

Dans mon cas, j'ai eu accès au code source et j'ai pu créer un fichier jar Android à l'aide de la méthode que j'ai décrite ici: https://stackoverflow.com/a/13144382/545064

Danny Remington - OMS
la source
5

Je sais que l'OP termine sa question en référence au plugin Eclipse, mais je suis arrivé ici avec une recherche qui ne spécifiait pas Eclipse. Voici donc pour Android Studio:

  1. Ajouter un jarfichier au répertoire libs (tel que copier / coller)
  2. Faites un clic droit sur le jarfichier et sélectionnez "Ajouter comme bibliothèque ..."
  3. cliquez sur "Ok" dans la boîte de dialogue suivante ou renommé si vous le souhaitez.

C'est tout!

Shanabus
la source
4

Il s'avère que je n'ai pas assez bien regardé ma trace de pile, le problème n'est pas que le JAR externe n'est pas inclus.

Le problème est que la plate-forme Android manque javax.naming. * Et de nombreux autres packages que le JAR externe a également des dépendances.

L'ajout de fichiers JAR externes et la définition de l'ordre et de l'exportation dans Eclipse fonctionnent comme prévu avec les projets Android.


la source
3

Goto Current Project

Clic droit-> Propriétés-> Chemin de génération Java-> Ajouter des fichiers Jar dans les bibliothèques -> Cliquez sur OK

Il est ensuite ajouté au fichier de bibliothèques référencées dans votre projet actuel.

kalyan G
la source
1

L'API Java d'Android ne prend pas en charge javax.naming. * Et de nombreux autres éléments javax. *. Vous devez inclure les dépendances dans des fichiers JAR séparés.

Rodrigo
la source
1

Si vous utilisez Android Studio, procédez comme suit (j'ai copié et modifié la réponse @Vinayak Bs):

  1. Sélectionnez la vue du projet dans la vue latérale du projet (au lieu de packages ou Android)
  2. Créez un dossier appelé libs dans le dossier racine de votre projet
  3. Copiez vos fichiers JAR dans le dossier libs
  4. La vue latérale sera mise à jour et les fichiers JAR apparaîtront dans votre projet
  5. Maintenant, faites un clic droit sur chaque fichier JAR que vous souhaitez importer, puis sélectionnez "Ajouter en tant que bibliothèque ...", qui l'inclura dans votre projet
  6. Après cela, tout ce que vous devez faire est de référencer les nouvelles classes dans votre code, par exemple. import javax.mail.*
kumaheiyama
la source
1

dans le studio android si vous utilisez gradle

ajoutez ceci à build.gradle

compile fileTree(dir: 'libs', include: ['*.jar'])

et ajoutez le fichier jar au dossier libs

g_vk
la source
1

Si vous utilisez le système de construction Gradle , procédez comme suit:

  1. mettre des jarfichiers dans le libsdossier respectif de votre application Android. Vous trouverez généralement il à Project> app> libs. Si le libsdossier est manquant, créez-en un.

  2. ajoutez ceci à votre build.gradlefichier votre app. (Pas à votre Project« s build.gradle)

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        // other dependencies
    }

    Cela inclura tous vos jarfichiers disponibles dans le libsdossier.

Si vous ne souhaitez pas inclure tous les jarfichiers, vous pouvez les ajouter individuellement.

compile fileTree(dir: 'libs', include: 'file.jar')

Rohit Arya
la source
0

créez un dossier (comme lib) dans votre projet, copiez votre pot dans ce dossier . maintenant, allez configurer le chemin de construction à partir du clic droit sur le projet, sélectionnez-le dans le chemin de construction

'ajouter un pot' parcourez le dossier que vous avez créé et choisissez le pot.

sharma_kunal
la source
0

La copie du fichier .jar dans le dossier du projet Android n'est pas toujours possible.
Surtout s'il s'agit d'une sortie d'un autre projet dans votre espace de travail et qu'il continue d'être mis à jour.

Pour résoudre ce problème, vous devrez ajouter le pot en tant que fichier lié à votre projet, au lieu de l'importer (qui le copiera localement).

Dans l'interface utilisateur, choisissez:

Projet -> Importer -> Système de fichiers -> yourjar.jar -> (zone Options) Avancé -> Créer un lien dans l'espace de travail.

Le lien est enregistré dans le fichier .project :

<linkedResources>
    <link>
        <name>yourjar.jar</name>
        <type>1</type>
        <locationURI>PARENT-5-PROJECT_LOC/bin/android_ndk10d_armeabi-v7a/yourjar.jar</locationURI>
    </link>
</linkedResources>

PARENT-5-PROJECT_LOC signifie par rapport au fichier projet, 5 répertoires vers le haut (../../../../../).

Ajoutez-le ensuite aux bibliothèques:
Projet -> Propriétés -> Chemin de génération Java -> Bibliothèques -> Ajouter un pot -> yourjar.jar

Dans la même fenêtre, choisissez l' onglet Commande et exportation et marquez votre pot pour qu'il soit ajouté à l'apk.

Yochai Timmer
la source