web-dev-qa-db-fra.com

Comment inclure manuellement un package aar externe à l'aide du nouveau système de génération Android Gradle

J'ai expérimenté le nouveau système de construction Android et je suis tombé sur un petit problème. J'ai compilé mon propre paquet aar d'ActionBarSherlock que j'ai appelé 'actionbarsherlock.aar'. Ce que j'essaie de faire est en fait d'utiliser cet aar pour construire mon APK final. Si j'inclut toute la bibliothèque ActionBarSherlock en tant que module de bibliothèque Android dans mon projet principal à l'aide du projet de compilation (': actionbarsherlock'), je parviens à construire sans problèmes.

Mais mon problème est que je souhaite fournir cette dépendance sous forme de package de fichier aar MANUELLEMENT, si je voulais un fichier JAR, je n'arrive pas à comprendre comment l'inclure correctement dans mon projet. J'ai essayé d'utiliser la configuration de compilation mais cela ne semble pas fonctionner. Je n'arrive pas à trouver pendant la compilation le symbole introuvable qui m'indique que le fichier classes.jar du paquet aar n'est pas inclus dans le chemin de classe.

Est-ce que quelqu'un connaît la syntaxe pour inclure manuellement un paquet aar dans un fichier?

build.gradle 

buildscript {

 repositories {
     mavenCentral()
  }
  dependencies {
    classpath 'com.Android.tools.build:gradle:0.4'
  }
}
apply plugin: 'Android'

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

Android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

EDIT: Donc, la réponse est qu’elle n’est pas prise en charge pour l’instant, voici la question issue si vous voulez la suivre.

EDIT: Actuellement, comme cela n’est toujours pas supporté directement, la meilleure alternative semble être la solution proposée par @RanWakshlak

EDIT: Également plus simple en utilisant la syntaxe proposée par @VipulShah 

338
Miguel Lavigne

Veuillez suivre les étapes ci-dessous pour le faire fonctionner (je l'ai testé jusqu'à Android Studio 2.2)

Disons que vous avez conservé un fichier AAR dans le dossier libs. (supposons que le nom du fichier est cards.aar)

puis dans l'application build.gradle, indiquez ce qui suit et cliquez sur le projet de synchronisation avec les fichiers Gradle . Ouvrez le niveau de projet build.gradle et ajoutez flatDir{dirs 'libs'} comme ci-dessous

allprojects {
   repositories {
      jcenter()
      flatDir {
        dirs 'libs'
      }
   }
}

et ouvrez maintenant le fichier build.grdle au niveau de l'application et ajoutez le fichier .aar 

    dependencies {
       compile(name:'cards', ext:'aar')
}

Si tout se passe bien, vous verrez que l’entrée de la bibliothèque est faite dans la version -> explosée

Notez également que si vous importez un fichier .aar à partir d'un autre projet comportant des dépendances, vous devez également les inclure dans votre build.gradle.

597
Vipul Shah
  1. Faites un clic droit sur votre projet et sélectionnez "Ouvrir les paramètres du module".

 Open module settings

  1. Cliquez sur le bouton "+" dans le coin supérieur gauche de la fenêtre pour ajouter un nouveau module.

 Add new module

  1. Sélectionnez "Importer un fichier .JAR ou .AAR" et cliquez sur le bouton "Suivant".

 Import AAR

  1. Recherchez le fichier AAR à l’aide du bouton Ellipsis "..." à côté du champ "Nom de fichier".

 Find AAR file

  1. Conservez le module de l'application sélectionné et cliquez sur le volet Dependencies pour ajouter le nouveau module en tant que dépendance.

 Dependencies pane

  1. Utilisez le bouton "+" de l'écran des dépendances et sélectionnez "Module dependency".

 Add module dependency

  1. Sélectionnez le module et cliquez sur "OK".

 Choose module

207
Oliver Kranz

Vous pouvez référencer un fichier aar depuis un référentiel . Maven est une option, mais il existe une solution plus simple: placez le fichier aar dans votre répertoire libs et ajoutez un référentiel de répertoires.

repositories {
  mavenCentral()
  flatDir {
    dirs 'libs'
  }
}

Ensuite, référencez la bibliothèque dans la section de dépendance:

dependencies {
  compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}

Vous pouvez consulter le blog de Min'an pour plus d'informations.

99
Ran Wakshlak

L'approche ci-dessous fonctionne avec le dernier studio Android (> v0.8.x):

  • Enregistrez le fichier aar sous le dossier libs du module de l'application (par exemple: <project>/<app>/libs/myaar.aar

  • Ajoutez ce qui suit à build.gradle de votre dossier de module "app" (pas à votre racine build.gradle de projet). Notez le nom en ligne de compilation, c’est myaar @ aar pas myaar.aar.

    dependencies {
        compile 'package.name.of.your.aar:myaar@aar'
    }
    
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
    
  • Cliquez sur Tools -> Android -> Sync Project with Gradle Files

41
ashoke

Actuellement, le référencement d'un fichier .aar local n'est pas pris en charge (comme l'a confirmé Xavier Ducrochet)

Vous pouvez plutôt configurer un référentiel Maven local (beaucoup plus simple qu'il n'y paraît) et référencer le fichier .aar à partir de là.

J'ai écrit un article de blog détaillant comment le faire fonctionner ici:

http://www.flexlabs.org/2013/06/using-local-aar-Android-library-packages-in-gradle-builds

20
Artiom Chilaru

avant (par défaut)

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

ajoutez simplement '*.aar' dans le tableau include.

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

cela fonctionne bien sur Android Studio 3.x.

si vous voulez ignorer une bibliothèque? fait comme ça.

implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')
19
susemi99

Vous pouvez ajouter plusieurs dépendances aar avec seulement quelques lignes de code.

Ajouter un référentiel flatDir local:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

Ajoutez chaque aar dans le répertoire libs à la configuration de dépendance compile:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}
17
mixel

Je viens de réussir!

  1. Copiez le fichier mylib-0.1.aar dans le dossier libs/.

  2. Ajoutez ces lignes au bas de build.gradle (devrait être app, pas projet):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
    
  3. Jusqu'ici tout va bien. Voici le point le plus important: 

Gradle doit accéder au réseau pour les dépendances, sauf si le mode hors connexion est activé. 

Assurez-vous que vous avez activé le travail hors ligne à l'aide de la case à cocher dans Project Structures/Gradle

- OR - 

Configurez les paramètres proxy afin d'accéder au réseau.

Pour configurer les paramètres de proxy, vous devez modifier le fichier gradle.properties du projet, en configurant séparément http et https comme suit:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

J'espère que ça marche.

16
Orhun D.

Malheureusement, aucune des solutions ici ne fonctionnait pour moi (j'ai des dépendances non résolues). Ce qui a finalement fonctionné et qui est le moyen le plus simple à mon humble avis est: Mettez en surbrillance le nom du projet depuis Android Studio, puis Fichier -> Nouveau module -> Importer le package JAR ou AAR. Le crédit va à la solution dans ce post

13
Nonos

J'ai aussi eu ce problème. Ce numéro de rapport: https://code.google.com/p/Android/issues/detail?id=55863 semble suggérer que la référence directe au fichier .AAR n'est pas prise en charge.

Peut-être que l'alternative pour l'instant est de définir la bibliothèque actionbarsherlock en tant que bibliothèque Gradle dans le répertoire parent de votre projet et de la référencer en conséquence.

La syntaxe est définie ici http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library

6
user937783

Il y a 2 façons:

  • Première manière

1: Ouvrez votre Android Studio et accédez à la fenêtre "Créer un nouveau module" par Fichier-> Nouveau-> Nouveau module ... 

enter image description here

2: Sélectionnez l’item "Importer .JAR/.AAR Package" et cliquez sur le bouton Suivant

3: Ajoutez une dépendance dans le fichier build.gradle appartenant à votre app Modlue.

dependencies {
    ...

    implementation project(path: ':your aar lib name')

}

que tout.

  • deuxième voie

1 Créez un dossier dans le répertoire libs, tel que aars.

2 Placez votre aar lib dans le dossier aars.

3 Ajoutez l'extrait de code 

repositories { flatDir { dirs 'libs/aars' } }

dans votre fichier build.gradle appartiennent au module d'application.

4 Ajoutez une dépendance dans le fichier build.gradle appartenant à votre app Modlue.

dependencies { ... compile(name:'your aar lib name', ext:'aar') }

que tout

si vous savez lire le chinois, vous pouvez consulter le blog 是 AAR 文件 以及 如何 Android 中 使用

6
shusheng007

Dans mon cas, il y a des dépendances dans ma bibliothèque et lorsque je crée une variable aar, j'ai échoué à cause des dépendances manquantes. Ma solution consiste donc à ajouter toutes les dépendances de ma bibliothèque avec un fichier arr

Donc, mon niveau de projet build.gradle a l'air si:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:2.1.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
        //add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
        flatDir {
            dirs 'libs'
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(modile app) so:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //your project depencies
    ...
    //add lib via aar-depency
    compile(name: 'aarLibFileNameHere', ext: 'aar')
    //add all its internal depencies, as arr don't have it
    ...
}

et bibliothèque build.gradle:

apply plugin: 'com.Android.library'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //here goes library projects dependencies, which you must include
    //in yours build.gradle(modile app) too
    ...
}
3
mohax

La méthode standard pour importer un fichier AAR dans une application est donnée dans https://developer.Android.com/studio/projects/Android-library.html#AddDependency

Cliquez sur Fichier> Nouveau> Nouveau module . Cliquez sur Importer le package .JAR/.AAR, puis cliquez sur Suivant . Entrez l'emplacement du fichier AAR ou JAR compilé, puis cliquez sur Terminer.

Veuillez vous référer au lien ci-dessus pour les prochaines étapes.

3
garnet

UPDATE Android STUDIO 3.4

  1. Aller à Fichier -> Structure du projet

enter image description here

  1. Modules et cliquez sur +

enter image description here

  1. Sélectionnez Importer un package .aar

enter image description here

  1. Trouver la route .aar

enter image description here

  1. Terminer et Appliquer , puis vérifier si un package est ajouté.

enter image description here

  1. Maintenant, dans le module d'application, cliquez sur + et Dépendance du module

enter image description here

  1. Vérifiez le paquet de la bibliothèque et Ok

enter image description here

  1. Vérifier la dépendance ajoutée

enter image description here

  1. Et la structure du projet comme celle-ci

enter image description here

2
Álvaro Agüero

J'ai trouvé cette solution de contournement dans le suivi des problèmes d'Android: https://code.google.com/p/Android/issues/detail?id=55863#c21

L'astuce (pas une solution) consiste à isoler vos fichiers .aar dans un sous-projet et à ajouter vos bibliothèques en tant qu'artefacts:

configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))

Plus d'infos: Gestion des dépendances transitives-pour-artefacts-locaux-jars-and-aar

2
jiparis

Juste pour simplifier la réponse

Si le fichier .aar est présent localement, incluez
compile project(':project_directory') dans les dépendances de build.gradle de votre projet.

Si le fichier .aar est présent à distance, incluez compile 'com.*********.sdk:project_directory:0.0.1@aar' dans les dépendances de build.gradle de votre projet.

2
anupam_kamble

Avec Android Studio 3.4 et Gradle 5, vous pouvez simplement le faire comme ceci

dependencies {
    implementation files('libs/actionbarsherlock.aar')
}
1
m0skit0

Dans mon cas, juste travailler quand j'ajoute "projet" pour compiler:

repositories {
    mavenCentral()
    flatDir {
        dirs 'libs'
    }
}


dependencies {
   compile project('com.x.x:x:1.0.0')
}
0
josedlujan

vous pouvez faire quelque chose comme ça:

  1. Placez vos bibliothèques locales (avec l'extension: .jar, .aar, ...) dans le dossier 'libs' (ou un autre si vous le souhaitez).

  2. Dans build.gradle (niveau de l'application), ajoutez cette ligne dans les dépendances

    implémentation fileTree (inclure: ['* .jar', '* .aar'], dir: 'libs')

0
nguyencse