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:
- Gradle Android Project con módulo Java 8
- Establecer funcionalidad del botón de retroceso del widget de búsqueda
- Android: recupere la ruta de una imagen escogida
- Android takePicture ha fallado
- Encontrar un patrón dentro de una imagen
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!
- ¿Cómo uncheck artículos en AlertDialog (setMultiChoiceItems)?
- Las notificaciones desaparecen tan pronto como finaliza el servicio
- Para eventos de Android, ¿por qué las sentencias switch son más comunes que if-else?
- ¿Hay alguna forma de imprimir el rastreo de la pila bajo demanda?
- ¿Cómo puedo configurar una alerta que aparezca en todo momento?
- OnPageFinished no disparar correctamente al procesar la página web
- Accediendo simultáneamente a diferentes miembros del mismo objeto en Java
- Marcadores no mostrados en el estilo MapView en Mapxbox Android
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.
- Teclado con scrollView
- Cómo crear una insignia de icono de notificación en las aplicaciones de Android (como el iPhone)