usar una studio make importar generate generar create crear biblioteca java android gradle android-library aar

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"