studio modulos libreria library dependencias create crear agregar java android gradle jar aar

java - modulos - create library android studio



Cómo incluir la dependencia JAR en una biblioteca AAR (3)

Ninguna de las sugerencias me ayudó para Gradle 4.6, así que perdí todo el día inventando la mía.

Finalmente encontré un buen Gist y lo modifiqué para mi versión de Gradle: https://gist.github.com/stepio/824ef073447eb8d8d654f22d73f9f30b

Resumen:

Tengo un archivo AAR que depende de un archivo JAR, cuando construyo el proyecto AAR, no contiene el código JAR.

Detalles:

Tengo un proyecto de biblioteca Java SDK que contiene código que usamos para proyectos web Java y tal, esta biblioteca se crea usando Gradle y reside en un servidor nexus interno (como un JAR).

El objetivo es proporcionar una versión "configurada por Android" de esta biblioteca JAR a través de una biblioteca AAR que múltiples aplicaciones de Android pueden usar y minimizar el esfuerzo (y el código repetitivo) para implementarla. Este archivo AAR también se carga en el servidor nexus para ser utilizado por los proyectos de aplicaciones de Android.

Mi proyecto AAR incluye una dependencia de gradle para mi biblioteca Java SDK (el JAR) pero cuando se construye, el AAR no incluye ninguna clase de él.

Código:

Este es el archivo gradle del proyecto Java SDK:

apply plugin: ''java'' //noinspection GroovyUnusedAssignment sourceCompatibility = 1.7 version = ''1.1.1'' repositories { mavenCentral() } jar { from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } dependencies { testCompile group: ''junit'', name: ''junit'', version: ''4.11'' testCompile ''org.apache.directory.studio:org.apache.commons.io:2.4'' compile ''org.springframework:spring-web:3.1.1.RELEASE'' compile ''com.google.code.gson:gson:2.3'' }

Este es el archivo gradle para mi proyecto AAR, tenga en cuenta que eliminé las declaraciones del repositorio de Maven a mi servidor nexus. Supongo que no debería importar por el bien de esta pregunta.

apply plugin: ''com.android.library'' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "2.2.2" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } lintOptions { abortOnError false } } dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) testCompile ''junit:junit:4.12'' compile ''com.android.support:appcompat-v7:23.1.0'' compile (''com.mycompany:javasdk:1.1.1'') }

Este es el archivo gradle para mi proyecto de Android, nuevamente eliminé las referencias del servidor nexus:

apply plugin: ''com.android.application'' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.mycompany.application1" minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } } dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) testCompile ''junit:junit:4.12'' compile ''com.android.support:appcompat-v7:23.1.0'' compile (''com.mycompany:androidsdk:2.2.2@aar'') }

NOTA: Inicialmente resolví el problema agregando el JAR en el directorio lib del proyecto AAR, pero esto no es deseado. Hace que tener un servidor nexus sea inútil. Sería bueno que podamos simplemente agregar el número de versión de JAR en el archivo gradle del proyecto AAR y la actualización se realiza automáticamente en el momento de la compilación.

NOTA2: Intenté agregar transitive=true a mi dependencia de AAR en el Proyecto Android, pero no resolvió nada, el verdadero problema es que al construir el proyecto AAR, el código del proyecto JAR no se agrupa.


Por defecto, AAR no incluye ninguna dependencia. La solución mencionada por @Hector debería funcionar para el complemento Gradle <3.0. Para Gradle plugin 3.0+, pruebe la configuración personalizada como se menciona here .

android { ... } // Add a new configuration to hold your dependencies configurations { myConfig } dependencies { .... myConfig ''com.android.support:appcompat-v7:26.1.0'' myConfig ''com.android.support:support-v4:26.1.0'' ... } task copyLibs(type: Copy) { from configurations.myConfig into "libs" }


Puedes agregar esta tarea:

task copyLibs(type: Copy) { from configurations.compile into ''libs'' }

Las dependencias se descargarán de su Nexus, pero cuando necesite empaquetar la biblioteca, ejecute esta tarea primero y los archivos jar se copiarán e incluirán en el aar final.