Gradle: ¿Cómo puedo incluir un jar local de un proyecto de java dependiente en una compilación de Android?

En mi aplicación de Android, estoy recibiendo un java.lang.NoClassDefFoundError cuando se ejecuta el código que hace referencia al código en un .jar dependiente. Mi proyecto incluye un módulo de Android, así como un módulo de biblioteca java sólo, que es donde está la dependencia de jar. Estoy usando gradle 1.10 para construir el proyecto. Aquí está mi diseño del proyecto:

 myProject - app (Android) - src - build.gradle - lib (java) - src - libs - local-dependency.jar - build.gradle - build.gradle - settings.gradle 

El proyecto principal build.gradle está en blanco mientras que el proyecto principal settings.gradle parece a:

 include ':app', ':lib' 

La aplicación para Android build.gradle ve así:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.8.+' } } apply plugin: 'android' repositories { mavenCentral() } android { compileSdkVersion 18 buildToolsVersion "19.0.2" defaultConfig { minSdkVersion 18 targetSdkVersion 18 versionCode 1 versionName "1.0" } } dependencies { compile project(':lib') } 

La biblioteca build.gradle es:

 apply plugin: 'java' repositories { mavenCentral() } dependencies { compile <some-dependency-in-maven> compile files('libs/local-dependency.jar') } 

Todo compila y paquetes sin errores y no estoy viendo ningún error en el IDE (IntelliJ 13). Por alguna razón, mi local-dependency.jar no se agrega al proceso de dex-ing durante la compilación de Android. Cualquier dependencia de maven especificada en el proyecto lib se agrega al .apk de Android muy bien; Es sólo mi dependencia local jar. ¿Hay algo que me falta?

¡Gracias!

Esto no es directamente posible ya que los tarros locales no se declaran como dependencias transitivas en Gradle.

Tiene dos opciones:

  • Fusiona los dos frascos en tu biblioteca java para que la salida contenga el jar local.
  • Crear un proyecto diferente sin fuente, sólo el frasco, y hacer que el proyecto dependa de él.

La segunda opción le da la capacidad de tener más de un proyecto dependen directamente de la jarra local (encima de ella se convierte en una dependencia transitiva). Para hacerlo, crear un nuevo proyecto de gradle y acaba de poner en su build.gradle lo siguiente:

 configurations.create("default") artifacts.add("default", file('somelib.jar')) 

Esto simplemente registra tu tarro como el artefacto por defecto publicado por el proyecto y esto será consumido por los otros proyectos.

  • Android - Recurso esperado del tipo ID
  • Resultados inesperados implementando desenfoque de movimiento simple en Libgdx
  • El botón Cast no aparece
  • JodaTime - Compruebe si LocalTime es después de ahora y ahora antes de otro LocalTime
  • Android: ¿Cómo cargar dinámicamente las clases de un archivo JAR?
  • Hacer que Eclipse se comporte como Visual Studio
  • ¿Cuándo usar actores en libgdx? ¿Cuáles son contras y pros?
  • Com.google.android.gms.common.internal.safe parcel.safe parcelable no encontrado
  • Y no importar R.java
  • ¿Cómo puedo escribir mediante programación un acceso directo a una página específica en la pantalla de inicio del lanzador de Android?
  • Loopj Android Async Http - onFailure no disparado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.