Gradle para Android AAR dependiendo de AAR, ambos en el mismo repositorio remoto?

Hay algunas preguntas flotando alrededor de las dependencias transitivas con archivos AAR en Gradle:

  • Android Studio 0.2.3 no puede resolver las dependencias transicionales de aar
  • Dependencia de la biblioteca de Android Gradle con la dependencia de la biblioteca mediante Nexus
  • Aar en el repositorio. Dependencia externa y NoClassDefFoundError

Yo también he encontrado problemas similares intentando establecer dependencias transitivas sobre archivos AAR en un repositorio remoto. Tengo la aplicación A, dependiendo de la biblioteca B, que a su vez depende de la biblioteca C. La biblioteca C está en un reporte de Maven. La biblioteca B está en el mismo repo, con un POM que contiene la dependencia de la biblioteca C. La aplicación A tiene la biblioteca B en sus dependencias. Sin embargo, ejecutando gradle clean assembleDebug resulta en: "La versión del módulo [Library B] depende de las bibliotecas pero no es una biblioteca en sí".

Traté de poner una recompensa en una de esas preguntas, esperando claridad, sin suerte.

Mi conjetura es que hay dos fuentes posibles de la dificultad que yo y aquellos con la pregunta de SO ya mencionada están viendo:

  1. Las dependencias AAR transitivas de un repositorio remoto están simplemente rotas

  2. Las dependencias AAR transitivas de un trabajo de repositorio remoto, pero hay algo en nuestros archivos POM, archivos build.gradle o algo que está rompiendo las dependencias

La pregunta : ¿Alguien sabe de un artefacto AAR en algún repositorio público (por ejemplo, Maven Central), que depende de otro artefacto AAR, también en el mismo repositorio público?

No estoy interesado en un AAR que dependa de algo en un repositorio local, como un AAR en Maven Central que depende de com.android.support:support-v4 . En mi caso, si Library B y Library C están en mi repositorio Maven local ( ~/.m2 ), todo funciona bien.

Según Xav, lo que estoy haciendo debería funcionar . Por lo tanto, espero que alguien me pueda señalar un ejemplo de trabajo, para que pueda usarlo para determinar donde el resto de nosotros puede estar fallando.

NOTA : Sé que pedir recursos fuera del sitio es verboten. En este caso, no busco el recurso por derecho propio, sino como un ejemplo de una configuración de trabajo, para ayudar a depurar una configuración que no funciona. Si usted tiene otra manera de escribir una respuesta que muestra una configuración de trabajo, que sería genial!

¡Gracias!

No tengo un ejemplo público, pero este escenario se ha configurado correctamente en un repositorio Nexus alojado internamente. Aquí está la configuración:

App – Proyecto de aplicación de Android LibraryB – Proyecto de biblioteca de Android picasso – Biblioteca de código abierto de Square (disponible en Maven Central) LibraryA – Proyecto de biblioteca de Android

La aplicación depende de LibraryB y Picasso LibraryB depende de LibraryA

Aquí está el POM para LibraryB (descargado de Nexus)

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>LibraryB</artifactId> <version>0.1</version> <packaging>aar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>LibraryA</artifactId> <version>3.0.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.squareup.picasso</groupId> <artifactId>picasso</artifactId> <version>2.1.1</version> <scope>compile</scope> </dependency> </dependencies> </project> 

Aquí está el build.gradle para LibraryB

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android-library' apply plugin: 'maven' version versionProp group 'com.example' repositories { mavenCentral() maven { url(exampleReleaseRepoUrl) } } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 19 } release { runProguard false proguardFile 'proguard-rules.txt' proguardFile getDefaultProguardFile('proguard-android.txt') } } dependencies { compile 'com.example:LibraryA:3.0.1' compile 'com.squareup.picasso:picasso:2.1.1' } uploadArchives { repositories { mavenDeployer { repository(url: uri(exampleReleaseRepoUrl)) { authentication(userName: nexusUsername, password: nexusPassword) } snapshotRepository(url: uri(exampleSnapshotRepoUrl)) { authentication(userName: nexusUsername, password: nexusPassword) } } } } 

Aquí está el POM para LibraryA (descargado de Nexus)

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>LibraryA</artifactId> <version>3.0.1</version> <packaging>aar</packaging> <dependencies> <dependency> <groupId>com.android.support</groupId> <artifactId>support-v4</artifactId> <version>19.0.0</version> <scope>compile</scope> </dependency> </dependencies> </project> 

El build.gradle para LibraryA es muy similar al de LibraryB anterior.

Los artefactos y POM para LibraryA y LibraryB se cargaron mediante el siguiente comando Gradle

 gradle uploadArchives 

El build.gradle para la aplicación se ve así

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android' repositories { mavenCentral() maven { url(exampleReleaseRepoUrl) } } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 8 targetSdkVersion 19 } buildTypes { release { runProguard false proguardFile getDefaultProguardFile('proguard-android.txt') } } productFlavors { defaultFlavor { proguardFile 'proguard-rules.txt' } } } dependencies { compile 'com.android.support:support-v4:19.0.0' compile 'com.android.support:appcompat-v7:19.0.0' compile 'com.example:LibraryB:0.1' } 

Si necesita más información, hágamelo saber.

Parece que mi problema se ha aclarado con Gradle 1.9 y com.android.tools.build:gradle:0.7.+ . Por lo menos, ya no puedo reproducir el problema.

A partir de Android Studio 0.4.4 utilizando dependencias .AAR es tan sencillo como usar las dependencias .JAR. Simplemente póngalo en el directorio \libs y build.gradle en build.gradle :

 compile files('libs/YOUR_LIBRARY_NAME.aar') 
  • Cómo excluir un archivo de un archivo de biblioteca Android .AAR con gradle
  • Android Gradle 1.0 Computación Código de la versión en configuración multi-sabor
  • Incrementar versión en la compilación del proyecto
  • Cómo actualizar módulos importados con modificación de código desde el proyecto de su biblioteca externa en Gradle / Android Studio
  • Problema de generación de Gradle 3.0.0-beta1
  • Error al recuperar el padre del elemento: No se encontró ningún recurso que coincida con el nombre dado 'android: TextAppearance.Material.Widget.Button.Borderless.Colored'
  • AssembleDebug no funciona con Gradle2.4 en Android Studio
  • Android Studio 1.0.0 - Error al encontrar butterknife: 6.0.0
  • ¿Cómo incluir dependencias en la biblioteca .aar?
  • Gradlew build freezing en mergeDebugResources
  • No se puede agregar una configuración con el nombre 'testCompile' ya que una configuración con ese nombre ya existe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.