tools - install gradle android studio
Gradle para Android AAR dependiendo de AAR, ¿ambos en el mismo repositorio remoto? (3)
Comenzar desde Android Studio 0.4.4 utilizando las dependencias .AAR es tan sencillo como usar las dependencias .JAR. Simplemente build.gradle
en el directorio /libs
y haga referencia a él en build.gradle
:
compile files(''libs/YOUR_LIBRARY_NAME.aar'')
Existen algunas preguntas sobre las dependencias transitivas con los archivos AAR en Gradle:
- Android Studio 0.2.3 no puede resolver dependencias transitorias aar
- Dependencia de la biblioteca de Android Gradle con la dependencia de la biblioteca usando Nexus
- Aar en el repositorio. Dependencia externa y NoClassDefFoundError
También me he encontrado con problemas similares al intentar configurar 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 repositorio de Maven. La Biblioteca B está en el mismo repositorio, con un POM que contiene la dependencia de la Biblioteca C. La aplicación A tiene la Biblioteca B en sus dependencias. Sin embargo, ejecutar gradle clean assembleDebug
da como resultado: "La versión del módulo [Biblioteca B] depende de las bibliotecas, pero no es una biblioteca en sí misma".
Intenté dar una recompensa a 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 SO mencionada anteriormente están viendo:
Las dependencias AAR transitivas de un repositorio remoto simplemente se rompen
Las dependencias AAR transitivas de un repositorio remoto funcionan, pero hay algo fuera de 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 dependa de otro artefacto AAR, también en el mismo repositorio público?
No me interesa un AAR que dependa de algo en un repositorio local, como un AAR en Maven Central que dependa de com.android.support:support-v4
. En mi caso, si la Biblioteca B y la Biblioteca C están ambas en mi repositorio local de Maven ( ~/.m2
), todo funciona bien.
Según Xav, lo que estoy haciendo debería funcionar . Por lo tanto, espero que alguien pueda señalarme un ejemplo práctico, de modo que pueda usarlo para determinar dónde podemos estar equivocados el resto de nosotros.
NOTA : Sé que pedir recursos externos es verboten. En este caso, no estoy buscando 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 tiene otra forma de escribir una respuesta que muestre una configuración de trabajo, ¡sería increíble!
¡Gracias!
No tengo un ejemplo público, pero tengo este escenario configurado con éxito en un repositorio Nexus alojado internamente. Aquí está la configuración:
Aplicación - Proyecto de aplicación para Android LibraryB - Proyecto de biblioteca para Android picasso - Biblioteca de código abierto de Square (disponible en Maven Central) LibraryA - Proyecto de biblioteca para 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 a través del siguiente comando de 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 necesitas más información, avísame.
Parece que mi problema se ha solucionado con Gradle 1.9 y com.android.tools.build:gradle:0.7.+
. Por lo menos, ya no puedo reproducir el problema.