java - una - Las dependencias transitivas no se resuelven para la biblioteca aar usando gradle
make aar android studio (3)
Investigué hace tiempo y probablemente vi las respuestas más populares aquí relacionadas con las dependencias aar y transitivas, pero de alguna manera todavía no está claro cómo hacer que esto funcione.
Asi que:
Tengo una biblioteca de Android con una configuración de gradle determinada:
apply plugin: ''android-library''
apply plugin: ''android-maven''
version = "1.0.0"
group = "com.somepackage"
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath ''com.github.dcendents:android-maven-plugin:1.0''
}
}
android {
compileSdkVersion 19
buildToolsVersion ''19.0.3''
defaultConfig {
minSdkVersion 10
}
}
repositories {
maven { url ''http://www.bugsense.com/gradle/'' }
}
dependencies {
provided ''com.google.android.gms:play-services:+''
provided ''com.android.support:appcompat-v7:+''
compile ''com.google.code.gson:gson:2.2.4''
compile ''com.bugsense.trace:bugsense:3.6''
compile ''commons-net:commons-net:3.3''
}
Luego lo estoy implementando en un repositorio maven local con la gradle install
. El archivo POM de la biblioteca implementada se ve así:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sprezzat</groupId>
<artifactId>app</artifactId>
<version>1.0.0</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>com.bugsense.trace</groupId>
<artifactId>bugsense</artifactId>
<version>3.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
Y, finalmente, la configuración de gradle de mi aplicación de Android utilizando la biblioteca anterior como una dependencia:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''com.android.tools.build:gradle:0.9.+''
}
}
apply plugin: ''android''
repositories {
mavenCentral()
mavenLocal()
}
android {
compileSdkVersion 15
buildToolsVersion "19.0.2"
defaultConfig {
minSdkVersion 10
targetSdkVersion 18
}
}
dependencies {
compile ''com.google.android.gms:play-services:+''
compile ''com.android.support:appcompat-v7:+''
compile ''com.somepackage:LIBRARY_NAME:1.0.0@aar''
}
Y después de implementar la aplicación en el teléfono NoClassDefFoundError
para las clases que pertenecen a las dependencias de compilación de mi biblioteca de Android.
Inspeccionando mis dependencias de aplicaciones de Android usando gradle dependencies
:
apk - Classpath packaged with the compiled main classes.
+--- com.google.android.gms:play-services:+ -> 4.3.23
| /--- com.android.support:support-v4:19.0.1 -> 19.1.0
+--- com.android.support:appcompat-v7:+ -> 19.1.0
| /--- com.android.support:support-v4:19.1.0
/--- com.somepackage:LIBRARY_NAME:1.0.0
Según el árbol anterior, no se detectan todas las dependencias transitivas. ¿Dónde está el problema y cómo se debe hacer correctamente?
He resuelto mi problema estableciendo el atributo transitive
para mi dependencia aar:
compile (''com.somepackage:LIBRARY_NAME:1.0.0@aar''){
transitive=true
}
Pruebe esto si está usando aar localmente:
compile(project(:your-library-name)) {
transitive=true
}
no debe usar "@aar", si el uso "@" se convierte en " notación solo de artefacto ", si desea usar "@" y desea que la dependencia sea transitiva, debe agregar "transitive = true"