Agregar archivos .aar locales a mi comstackción gradle

Así que he creado una biblioteca de Android y la compilé con éxito en un archivo .aar que llamé a este archivo aar: "projectx-sdk-1.0.0.aar" ahora quiero que mi nuevo proyecto dependa de este aar así que lo que hice es seguir esta publicación: http://life.nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/

Pero la publicación me confunde ya que no obtengo el resultado deseado:

El nombre del paquete del aar es: com.projectx.photosdk y el módulo dentro se llama sdk

aquí está mi estructura de proyecto actual:

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

Y él es mi archivo de comstackción 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 } 

// EDITAR

Los errores que obtengo:

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

flatDir tu bloque flatDir en el bloque de repostories incorrecto. El bloque de repositories dentro de buildscript le dice a Gradle dónde encontrar el complemento Android-Gradle, pero no el rest de las dependencias. Necesita tener otro bloque de repositories nivel superior como este:

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

Probé esto y funciona bien en mi configuración.

Con las versiones recientes de Android Studio, probado con 1.3, para usar el archivo .AAR local y no uno extraído del repository de maven / jcenter, solo vaya a Archivo> Nuevo> Nuevo módulo y elija Importar .JAR / .AAR Paquete .

Lo que acabará siendo es un nuevo módulo en su proyecto que contiene un archivo build.gradle muy simple que se parece más o menos a esto:

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

Por supuesto, otros proyectos tienen que hacer referencia a este nuevo módulo con la directiva de comstackción de proyectos . Entonces, en un proyecto que usa este nuevo módulo que es simple, un archivo .aar local tiene esto en su 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') } [...] 

Estos días (más de 1 año después de esta pregunta) con Android Studio> 1.0, la dependencia local funciona correctamente:

  • El SDK de Android busca dependencias en un repository local predeterminado de: $ANDROID_HOME/extras/android/m2repository/
  • En un proyecto de biblioteca local puede publicar el aar en este directorio. Aquí hay un fragmento que se puede agregar al archivo build.gradle su módulo (por ejemplo: 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' } } } 
  • En su proyecto de biblioteca, ejecute ./gradlew uploadArchives para publicar el aar en ese directorio
  • En el proyecto de aplicación en el que desea utilizar la biblioteca, agregue la dependencia a su proyecto / aplicación / build.gradle. compile 'your.package:sdk-name:1.0-SNAPSHOT'

Para la dependencia local, la próxima comstackción de gradle debería encontrar el archivo desplegado anteriormente ¡y eso es todo!


En mi caso, uso lo anterior para el desarrollador local, pero también tengo un servidor de integración continuo de Bamboo para la Biblioteca que publica cada comstackción en un repository de artefactos Nexus compartido. El código de biblioteca completo para implementar el artefacto se convierte en:

 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' } } } 

Con el fin de decirle a las aplicaciones que descarguen de mi repository interno de Nexus, agregué el repository Nexus maven interno justo encima de jcenter () en ambos bloques de “repositorys” en el proyecto / build.gradle

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

Y la dependencia de la aplicación parece compile 'your.package:sdk-name:45' Cuando actualizo la versión 45 a 46 es cuando mi proyecto tomará el nuevo artefacto del servidor Nexus.

En Android Studio 3.1.3 con gradle 3.0.1.
Simplemente agregue la implementation fileTree(dir: 'libs', include: ['*.aar']) o los implementation files('libs/app-release.aar') sin ningún otro trabajo de flatdir .

Con la versión más nueva de Gradle, ahora hay una forma ligeramente actualizada de hacer lo que Stan sugirió (ver maving publishing )

 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") } } } 

Parece agregar archivos .aar, ya que la dependencia local aún no es compatible (está planificada para ser admitida en 0.5.0 Beta)

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

Pero la forma en que usa su biblioteca en dependencia solo funcionará si su biblioteca está en el repository maven central o en el repository Maven local.

Remítalo a Cómo usar el repository maven local para usar .aar en dependencias de módulos.

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