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í".
- ¿Cómo configuro el nombre de mi paquete de aplicación de Android basado en dos dimensiones de sabor diferentes?
- : No se puede instanciar la aplicación y ClassNotFound mientras se comparte apk
- Android Studio Múltiples archivos dex error gradle
- Método Gradle DSL no encontrado: 'multiDexEnabled ()'
- Android Studio Gradle falla durante la compilación
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:
-
Las dependencias AAR transitivas de un repositorio remoto están simplemente rotas
-
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!
- Cómo disminuir React-Native Android tamaño de la aplicación
- Error build.gradle con com.google.android.gms: play-services-maps: 9.4.0
- Análisis de Android Project con Lint y SonarQube
- Agregar archivos .aar locales a la generación de Gradle utilizando "flatDirs" no funciona
- Android Studio - No se pudo aplicar el complemento
- Dagger2 dependencia - Gradle
- Android: No se encontró ningún recurso powered_by_google_light icono en herramientas de compilación 23.0.3?
- Error: Error de ejecución para la tarea ': app: shrinkReleaseMultiDexComponents'
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')
- Android.content.Context.getPackageName () 'en una referencia de objeto nulo
- Lectura de un Json Array en android