web-dev-qa-db-fra.com

Comment créer un projet de bibliothèque dans Android Studio et un projet d'application qui utilise le projet de bibliothèque

Je suis nouveau dans le système de construction Gradle et IntelliJ.

Alors, comment puis-je créer un projet de bibliothèque Android (par exemple, com.myapp.lib1) et le projet d'application (par exemple, com.myapp.app) et faire en sorte que le système de construction inclue le fichier com.myapp.lib1 dans le projet d'application ?

Je suis allé à la structure de projet -> Modules -> projet My App et j'ai ajouté une dépendance au projet lib. IntelliJ peut maintenant reconnaître les classes du projet lib lorsqu'il est utilisé dans le projet d'application, mais lorsque j'exécute le projet d'application, des erreurs telles que:

Gradle: error: package com.myapp.lib1 does not exist
158

Pour créer une bibliothèque:

Fichier> Nouveau module

sélectionnez Android Library

Lib

Pour utiliser la bibliothèque, ajoutez-la en tant que dépendance:

Fichier> Structure du projet> Modules> Dépendances

dep

Ajoutez ensuite le module (bibliothèque Android) en tant que dépendance de module.

add module

Exécutez votre projet. Cela sera travail.

113
Blundell

Je me demande pourquoi il n'y a pas d'exemple de projet de bocal autonome.

Dans Eclipse, il suffit de cocher la case "Is Library" dans la boîte de dialogue de configuration du projet.
Dans Android studio, j’ai suivi cette procédure et j’ai obtenu un fichier jar.

  1. Créez un projet.

  2. ouvrir le fichier dans le menu de projet de gauche. (app/build.gradle): Scripts Gradle> build.gradle (Module: XXX)

  3. changer une ligne: apply plugin: 'com.Android.application' -> 'apply plugin: com.Android.library'

  4. supprimez applicationId dans le fichier: applicationId "com.mycompany.testproject"

  5. projet de construction: Build> Rebuild Project

  6. alors vous pouvez obtenir un fichier aar: app> construire> sorties> un dossier aar

  7. changer le nom de l'extension de fichier aar en Zip

  8. décompressez et vous pourrez voir classes.jar dans le dossier. renommer et l'utiliser!

Quoi qu'il en soit, je ne sais pas pourquoi Google rend la création de fichiers JAR si gênante dans Android studio.

108
Jinbom Heo

Le plugin Gradle de Google recommandé pour la configuration de vos fichiers Gradle afin de générer plusieurs projets présente quelques inconvénients Si vous avez plusieurs projets dépendant d'un projet de bibliothèque, cet article explique brièvement la configuration recommandée par Google, ses insuffisances et vous recommande une méthode différente pour configurer vos fichiers Gradle. prendre en charge les configurations multi-projets dans Android Studio:

ne configuration multiprojet alternative pour Android studio

Une manière différente:

Il s’avère qu’il existe un meilleur moyen de gérer plusieurs projets dans Android Studio. L'astuce consiste à créer des projets Android Studio distincts pour vos bibliothèques et à indiquer à Gradle que le module de la bibliothèque dont dépend votre application se trouve dans le répertoire du projet de la bibliothèque. Si vous souhaitez utiliser cette méthode avec la structure de projet que j'ai décrite ci-dessus, procédez comme suit:

  1. Créer un projet Android Studio pour la bibliothèque StickyListHeaders
  2. Créer un projet Android Studio pour App2
  3. Créer un projet Android Studio pour App1
  4. Configurez App1 et App2 pour générer les modules dans le projet StickyListHeaders.

La 4ème étape est la partie la plus difficile, c’est la seule étape que je vais décrire en détail. Vous pouvez référencer des modules externes au répertoire de votre projet en ajoutant une instruction de projet dans votre fichier settings.gradle et en définissant la propriété projectDir sur l'objet ProjectDescriptor renvoyé par cette instruction de projet:

enter image description here

Le code à mettre dans settings.gradle:

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

Si vous avez correctement effectué cette opération, vous remarquerez que les modules référencés par votre projet apparaîtront dans le navigateur de projet, même si ces modules sont externes au répertoire de projet:

enter image description here

Cela vous permet de travailler simultanément sur le code de bibliothèque et le code d'application. L'intégration du contrôle de version fonctionne également très bien lorsque vous référencez des modules de manière externe de cette manière. Vous pouvez valider et appliquer vos modifications au code de la bibliothèque, tout comme vous pouvez valider et modifier le code de votre application.

Cette façon de configurer plusieurs projets évite les difficultés qui affectent la configuration recommandée par Google. Comme nous référençons un module qui se trouve en dehors du répertoire du projet, nous n’avons pas besoin de faire des copies supplémentaires du module de bibliothèque pour chaque application qui en dépend, et nous pouvons mettre à jour nos bibliothèques sans aucune sorte de non-sens absurde du sous-module git.

Malheureusement, cette autre façon de mettre en place plusieurs projets est très difficile à trouver. De toute évidence, ce n’est pas quelque chose que vous comprendrez en consultant le guide de Google. Pour l’instant, il n’ya aucun moyen de configurer vos projets de cette manière en utilisant l’interface utilisateur de Android Studio.

93
Aqib Mumtaz

Découvrez ceci lien sur les configurations multi-projets .

Certaines choses à souligner, assurez-vous que votre fichier settings.gradle est mis à jour pour faire référence aux modules de l'application et de la bibliothèque.

settings.gradle: include ':app', ':libraries:lib1', ':libraries:lib2'

Assurez-vous également que build.gradle de l'application possède les éléments suivants:

dependencies {
     compile project(':libraries:lib1')
}

Vous devriez avoir la structure suivante:

 MyProject/
  | settings.gradle
  + app/
    | build.gradle
  + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

Le fichier build.gradle de l'application doit utiliser le plug-in com.Android.application, tandis que le fichier build.gradle de toutes les bibliothèques doit utiliser le plug-in com.Android.library.

Le Android Studio IDE devrait se mettre à jour si vous pouvez créer à partir de la ligne de commande avec cette configuration.

45
GrkEngineer

Pour Intellij IDEA (et Android Studio), chaque bibliothèque est un module. Pensez à un module dans Android Studio comme à un projet dans Eclipse. Projet dans Android Studio est un ensemble de modules. Les modules peuvent être des applications exécutables ou des modules de bibliothèque.

Ainsi, pour ajouter un nouveau projet de bibliothèque Android, vous devez créer un module de type "bibliothèque Android". Ajoutez ensuite ce module de bibliothèque à la liste des dépendances de votre module principal (module Application).

13
Simon-Droid

Le moyen le plus simple pour moi de créer et réutiliser un projet de bibliothèque:

  1. Sur un projet ouvert file > new > new module (et répondez aux questions sur l'interface utilisateur)

enter image description here

  1. vérifier/ou ajouter si dans le fichier settings.gradle : include ':myLibrary'
  2. vérifier/ou ajouter si dans le fichier build.gradle :

    dependencies { ... compile project(':myLibrary') }

  3. Pour réutiliser ce module de bibliothèque dans un autre projet, copiez son dossier dans le projet au lieu de l'étape 1 et suivez les étapes 2 et 3.

Vous pouvez également créer un nouveau projet d'application studio Vous pouvez facilement remplacer un module d'application existant par un module de bibliothèque en modifiant l'affectation du plug-in dans le fichier build.gradle. à com.Android.library.

apply plugin: 'com.Android.application'

Android {...}

à

apply plugin: 'com.Android.library'

Android {...}

plus ici

12
hanoo

Vous pouvez ajouter un nouveau module à n'importe quelle application comme Blundell indique sa réponse, puis la référencer à partir de toute autre application.

Si vous souhaitez déplacer le module à n’importe quel endroit de votre ordinateur, déplacez simplement le dossier du module (les modules sont complètement indépendants), vous devrez alors référencer le module.

Pour référencer ce module, vous devez:

  • Dans le fichier build.gradle de votre application, ajoutez:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • Sur le fichier settings.gradle, ajoutez ce qui suit:

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    
9
Julian

N'oubliez pas d'utiliser apply plugin: 'com.Android.library' dans votre build.gradle au lieu d'appliquer le plugin: 'com.Android.application'

5
Ryan R

Manière de documentation

C'est la méthode recommandée, conformément aux conseils donnés dans la documentation de Android Studio.

Créer un module de bibliothèque

Créez un nouveau projet pour créer votre bibliothèque. Cliquez sur Fichier> Nouveau> Nouveau module> Android Bibliothèque> Suivant> (choisissez un nom)> Terminer . Ajoutez ensuite les classes et les ressources de votre choix à votre bibliothèque.

Lorsque vous construisez le module, un fichier AAR sera créé. Vous pouvez le trouver dans project-name/module-name/build/outputs/aar/.

Ajoutez votre bibliothèque en tant que dépendance

Vous pouvez ajouter votre bibliothèque en tant que dépendance à un autre projet comme celui-ci:

  1. Importez le fichier AAR de votre bibliothèque avec Fichier> Nouveau module> Importer le package .JAR/.AAR> Suivant> (choisissez l’emplacement du fichier)> Terminer . (N'importez pas le code, sinon il sera éditable dans trop d'endroits.)
  2. Dans le fichier settings.gradle, assurez-vous que le nom de votre bibliothèque est présent.

    include ':app', ':my-library-module'
    
  3. Dans le fichier build.gradle de l'application, ajoutez la ligne de compilation à la section dependencies:

    dependencies {
        compile project(":my-library-module")
    }
    
  4. Vous serez invité à synchroniser votre projet avec gradle. Fais le.

C'est ça. Vous devriez pouvoir utiliser votre bibliothèque maintenant.

Remarques

Si vous souhaitez que votre bibliothèque soit facilement accessible à un public plus large, envisagez d'utiliser JitPac ou JCenter .

4
Suragch

Avait la même question et résolu de la manière suivante:

Situation de départ:

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

Target: vouloir ajouter un module nommé dataformats

  1. Ajouter un nouveau module (par exemple: Java Library)
  2. Assurez-vous que votre settings.gradle ressemble à ceci (normalement automatiquement):

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. Assurez-vous ( manuellement ) que les fichiers build.gradle des modules devant utiliser votre bibliothèque ont la dépendance suivante:

    dependencies { ... compile project(':dataformats') }

3
Matthias

Objet: Android bibliothèque à un seul emplacement - Partage de plusieurs projets http://raevilman.blogspot.com/2016/02/Android-library-project-using-Android.html

3
raevilman

Comme le commentaire theczechsensation ci-dessus, j’essaie de chercher à propos de Gradle Build Varians et j’ai trouvé ce lien: http://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005 This est une solution très simple. Voici ce que j'ai fait: - Dans build.gradle:

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

Ensuite, j'ai 2 autres versions de mon application: pro et version d'évaluation avec 2 nom de paquet différent, ce qui correspond à 2 applicationId dans le code ci-dessus, de sorte que je puisse télécharger les deux sur Google Play. Je code encore dans la section "main" et utilise le getpackageName pour basculer entre les versions. Allez simplement sur le lien que j'ai donné pour plus de détails.

2
Hai nguyen thanh

Dans mon cas, en utilisant MAC OS X 10.11 et Android 2.0, et en faisant exactement ce que Aqib Mumtaz a expliqué.

Mais à chaque fois, j'ai eu ce message: "n problème est survenu lors de la configuration du projet ': app'.> Impossible d'évaluer le module xxx: Configuration avec le nom 'default' introuvable."

J'ai trouvé que la raison de ce message est que Android 2.0 ne permet pas de créer directement une bibliothèque. J'ai donc d'abord décidé de créer un projet d'application, puis de modifier le build.gradle afin de le transformer en bibliothèque.

Cette solution ne fonctionne pas, car un projet de bibliothèque est très différent d'un projet d'application.

Donc, j'ai résolu mon problème comme ceci:

  • Commencez par créer une application standard (si nécessaire).
  • Puis choisissez 'Fichier/Créer un module'
  • Allez dans le Finder et déplacez le dossier du module fraîchement créé dans votre répertoire framework.

Continuez ensuite avec la solution proposée par Aqib Mumtaz.

En conséquence, la source de votre bibliothèque sera partagée sans qu'il soit nécessaire de dupliquer les fichiers source à chaque fois (c'était une hérésie pour moi!)

En espérant que cela vous aide.

1
Christophe

Il y a deux façons les plus simples si l'une ne fonctionne pas, essayez l'autre.

  1. Ajoutez la dépendance de la bibliothèque dans la dépendance dans le fichier build.gradle de la bibliothèque à l’aide de, et collez-la dans les bibliothèques externes.

OR

  1. Allez simplement dans votre dossier libs dans le dossier de l'application et collez tous vos fichiers .jar, par exemple, les fichiers de bibliothèque là-bas. Maintenant, le truc, c'est d'aller dans le fichier settings.gradle, ajoutez maintenant cette ligne "include ': app: libs" "après" include ": app '"Cela fonctionnera certainement ........... :)
1
Sudhanshu Gaur