Ajout de fichiers .aar locaux à ma version de gradle

Donc, j’ai créé une bibliothèque Android et l’ai compilé avec succès dans un fichier .aar appelé ce fichier aar: "projectx-sdk-1.0.0.aar" maintenant je veux que mon nouveau projet dépend de cette aar donc ce que j’ai fait est suivre ce post: http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/

Mais le post me confond car je n’obtiens pas le résultat souhaité:

Le nom de package de l’arar est: com.projectx.photosdk et le module à l’intérieur s’appelle sdk

voici ma structure de projet actuelle:

 |-SuperAwesomeApp |--.idea |--gradle |--App |---aars |----projectx-sdk-1.0.0.aar |---build |---jars |---src |---build.gradle 

Et il est mon fichier de construction gradle:

 apply plugin: 'android' buildscript { repositories { mavenCentral() flatDir { dirs 'aars' } } } android { comstackSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { minSdkVersion 11 targetSdkVersion 19 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { comstack 'com.android.support:gridlayout-v7:19.0.1' comstack 'com.android.support:support-v4:19.0.1' comstack 'com.android.support:appcompat-v7:19.0.1' comstack 'com.projectx.photosdk:sdk:1.0.0@aar' // comstack files( 'aars/sdk-1.0.0.aar' ) // Does not work either } 

// MODIFIER

Les erreurs que je reçois:

 Failed to refresh Gradle project 'SuperAwesomeApp' Could not find com.projectx.photosdk:sdk:1.0.0. Required by: SuperAwesomeApp:App:unspecified 

Vous placez votre bloc flatDir dans le mauvais bloc repostories . Le bloc de repositories intérieur de buildscript indique à Gradle où trouver le plugin Android-Gradle, mais pas le rest des dépendances. Vous devez disposer d’un autre repositories niveau supérieur comme ceci:

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

J’ai testé cela et cela fonctionne bien sur ma configuration.

Avec les versions récentes d’Android Studio, testées avec la version 1.3, pour utiliser le fichier .AAR local et non celui extrait du référentiel maven / jcenter, allez simplement dans Fichier> Nouveau> Nouveau module et choisissez Import .JAR / .AAR Package .

Vous allez vous retrouver avec un nouveau module dans votre projet qui contient un fichier build.gradle très simple qui ressemble plus ou moins à ceci:

 configurations.create("default") artifacts.add("default", file('this-is-yours-package-in-aar-format.aar')) 

Bien entendu, d’autres projets doivent référencer ce nouveau module avec une directive de projet de compilation régulière. Donc, dans un projet qui utilise ce nouveau module qui est simple, un fichier .aar local a ceci dans son build.gradle

 [...] dependencies { comstack fileTree(dir: 'libs', include: ['*.jar']) testComstack 'junit:junit:4.12' omstack 'com.android.support:appcompat-v7:23.1.0' comstack 'com.android.support:design:23.1.0' [...] comstack project(':name-of-module-created-via-new-module-option-described-above') } [...] 

Ces jours-ci (plus d’un an après cette question) avec Android Studio> 1.0, la dépendance locale fonctionne correctement:

  • Le sdk Android recherche les dépendances dans un référentiel local par défaut de: $ANDROID_HOME/extras/android/m2repository/
  • Dans un projet de bibliothèque locale, vous pouvez publier l’arar dans ce répertoire. Voici un extrait qui peut être ajouté au fichier build.gradle votre module (ex: sdk / build.gradle)

     apply plugin: 'maven' uploadArchives { repositories { mavenDeployer { repository(url: "file://localhost" + System.getenv("ANDROID_HOME") + "/extras/android/m2repository/") pom.version = '1.0-SNAPSHOT' pom.groupId = 'your.package' pom.artifactId = 'sdk-name' } } } 
  • Dans votre projet de bibliothèque, exécutez ./gradlew uploadArchives pour publier l’arar dans ce répertoire
  • Dans le projet d’application dans lequel vous souhaitez utiliser la bibliothèque, ajoutez la dépendance à votre projet / app / build.gradle. comstack 'your.package:sdk-name:1.0-SNAPSHOT'

Pour la dépendance locale, la prochaine version de gradle devrait trouver l’archive précédemment déployée et c’est tout!


Dans mon cas, j’utilise ce qui précède pour le développement local, mais j’ai également un serveur d’continuous integration Bamboo pour la bibliothèque qui publie chaque version dans un référentiel d’artefacts Nexus partagé. Le code de bibliothèque complet pour déployer l’artefact devient alors:

 uploadArchives { repositories { mavenDeployer { if (System.getenv("BAMBOO_BUILDNUMBER") != null) { // Deploy to shared repository repository(url: "http://internal-nexus.url/path/") { authentication(userName: "user", password: "****") } pom.version = System.getenv("BAMBOO_BUILDNUMBER") } else { // Deploy to local Android sdk m2repository repository(url: "file://localhost" + System.getenv("ANDROID_HOME") + "/extras/android/m2repository/") pom.version = '1.0-SNAPSHOT' } pom.groupId = 'your.package' pom.artifactId = 'sdk-name' } } } 

Afin de demander aux applications de télécharger depuis mon repository Nexus interne, j’ai ajouté le repository interne Nexus maven juste au-dessus de jcenter () dans les deux blocs “repositories” du projet / build.gradle.

 repositories { maven { url "http://internal-nexus.url/path/" } jcenter() } 

Et la dépendance à l’application ressemble alors à la comstack 'your.package:sdk-name:45' Quand je mets à jour la version 45 à 46, c’est quand mon projet va récupérer le nouvel artefact du serveur Nexus.

Dans Android Studio 3.1.3 avec gradle 3.0.1.
Il suffit d’append le implementation fileTree(dir: 'libs', include: ['*.aar']) ou des implementation files('libs/app-release.aar') sans autres travaux flatdir .

Avec la dernière version de Gradle, il y a maintenant une méthode légèrement mise à jour pour faire ce que Stan a suggéré (voir la publication de publication ).

 apply plugin: 'maven-publish' publishing { publications { aar(MavenPublication) { groupId 'org.your-group-id' artifactId 'your-artifact-id' version 'xxx' // Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-release.aar") } } repositories { maven { url("file:" + System.getenv("HOME") + "/.m2/repository") } } } 

Il semble append des fichiers .aar car la dépendance locale n’est pas encore prise en charge (planifié pour être pris en charge dans la version bêta 0.5.0)

https://code.google.com/p/android/issues/detail?id=55863

Mais la façon dont vous utilisez votre bibliothèque en dépendance ne fonctionnera que si votre bibliothèque se trouve sur le référentiel maven central ou dans le référentiel maven local.

Reportez-vous à la section Comment utiliser le référentiel maven local pour utiliser .aar dans les dépendances de module.

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