J'ai donc créé une bibliothèque Android et l'ai compilée avec succès dans un fichier .aar que j'ai appelé ce fichier aar: "projectx-sdk-1.0.0.aar"
maintenant, je veux que mon nouveau projet dépende de cela, alors ce que j’ai fait est de suivre ce post: http://life.nimbco.us/referencing-local-aar-files-with-Android-studios -new-gradle-based-build-system /
Mais la poste me trouble car je n’obtiens pas le résultat souhaité:
Le nom du paquet aar est: com.projectx.photosdk
et le module à l'intérieur s'appelle sdk
voici la structure de mon projet actuel:
|-SuperAwesomeApp
|--.idea
|--gradle
|--App
|---aars
|----projectx-sdk-1.0.0.aar
|---build
|---jars
|---src
|---build.gradle
Et il est mon fichier de construction de Gradle:
apply plugin: 'Android'
buildscript {
repositories {
mavenCentral()
flatDir {
dirs 'aars'
}
}
}
Android {
compileSdkVersion 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 {
compile 'com.Android.support:gridlayout-v7:19.0.1'
compile 'com.Android.support:support-v4:19.0.1'
compile 'com.Android.support:appcompat-v7:19.0.1'
compile 'com.projectx.photosdk:sdk:1.0.0@aar'
// compile files( 'aars/sdk-1.0.0.aar' ) // Does not work either
}
// EDIT
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 mettez votre bloc flatDir
dans le mauvais bloc repostories
. Le bloc repositories
à l'intérieur de buildscript
indique à Gradle où trouver le plug-in Android-Gradle, mais pas le reste des dépendances. Vous devez avoir un autre bloc _ de haut niveau repositories
comme ceci:
repositories {
mavenCentral()
flatDir {
dirs 'aars'
}
}
J'ai testé cela et cela fonctionne bien sur ma configuration.
Avec les versions récentes de Android Studio, testé avec la version 1.3, pour utiliser un fichier .AAR local et non extrait du référentiel maven/jcenter, accédez simplement à Fichier> Nouveau> Nouveau module et choisissez Importer le package .JAR/.AAR.
Vous allez vous retrouver avec un nouveau module dans votre projet qui contient un fichier très simple build.gradle 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 régulière compile project. Donc, dans un projet qui utilise ce nouveau module qui est simple, un fichier .aar local a cela dans son build.gradle
[...]
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
ompile 'com.Android.support:appcompat-v7:23.1.0'
compile 'com.Android.support:design:23.1.0'
[...]
compile project(':name-of-module-created-via-new-module-option-described-above')
}
[...]
Dans Android Studio 3.1.3 avec la version 3.0.1.
Ajouter simplement implementation fileTree(dir: 'libs', include: ['*.aar'])
ou implementation files('libs/app-release.aar')
sans autre flatdir
fonctionne.
Ces jours-ci (plus d'un an après cette question) avec Android Studio> 1.0, la dépendance locale fonctionne correctement:
$Android_HOME/extras/Android/m2repository/
Dans un projet de bibliothèque locale, vous pouvez publier le fichier aar dans ce répertoire. Voici un extrait qui peut être ajouté au fichier build.gradle
De 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'
}
}
}
./gradlew uploadArchives
Pour publier le fichier aar dans ce répertoire.compile 'your.package:sdk-name:1.0-SNAPSHOT'
Pour la dépendance locale, la prochaine génération de gradles 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’intégration continue Bamboo pour la bibliothèque qui publie chaque version dans un référentiel d’artefacts Nexus partagé. Le code de la bibliothèque complète 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 d'indiquer aux applications de télécharger à partir de mon référentiel Nexus interne, j'ai ajouté le référentiel interne Nexus maven juste au-dessus de jcenter () dans les deux blocs "référentiels" du projet/build.gradle.
repositories {
maven {
url "http://internal-nexus.url/path/"
}
jcenter()
}
Et la dépendance des applications ressemble alors à compile 'your.package:sdk-name:45'
Lorsque je mets à jour la version 45 en 46, mon projet récupérera le nouvel artefact du serveur Nexus.
Avec la dernière version de Gradle, il existe maintenant un moyen légèrement actualisé de faire ce que Stan a suggéré (voir maving publishing )
apply plugin: 'maven-publish'
publishing {
publications {
aar(MavenPublication) {
groupId 'org.your-group-id'
artifactId 'your-artifact-id'
version 'x.x.x'
// 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 que l'ajout de fichiers .aar en tant que dépendance locale n'est pas encore pris en charge (prise en charge prévue dans la version 0.5.0 bêta).
https://code.google.com/p/Android/issues/detail?id=5586
Cependant, la manière 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 modules.
http://www.flexlabs.org/2013/06/using-local-aar-Android-library-packages-in-gradle-builds