Android Eclipse NoClassDefFoundError para archivos externos .jar

Me encontré con un extraño error. Tengo un proyecto de Android que usa bibliotecas externas, en particular:

  • android-support-v4.jar (para compatibilidad con Fragment en Android 1.6)
  • GoogleAdMobAdsSdk-4.3.1.jar (para anuncios)

El proyecto funcionó bien hasta que actualicé algunos aspectos del complemento (no recuerdo los detalles ya que no le presté demasiada atención) y después de eso, cada vez que trato de usar cualquier clase de los archivos .jar anteriores (o cualquier de sus subclases, incluso las definidas por mí), obtendría un java.lang.NoClassDefFoundError. No pude encontrar la respuesta después de mucha búsqueda, así que estoy realmente perplejo.

Creo que este problema está relacionado con la configuración de mi IDE y tiene poco que ver con el código real, por lo que no publicaré ninguno a menos que sea absolutamente necesario.

Necesita leer esto: tratar con dependencias en proyectos de Android .

Este enlace también es útil: ClassDefNotFoundError con ADT 17

Básicamente, crea una carpeta llamada libs y coloca todos tus archivos jar dentro. La actualización más reciente se encargará automáticamente del rest por usted. Ya no necesita editar su ruta.

Android no es compatible con Java1.7 hasta ahora. Los archivos jar creados con el nivel de conformidad 1.7 no se pueden usar en las aplicaciones de Android. Reconstruya su proyecto Java con nivel de cumplimiento 5.0 o 6.0 antes de exportar el archivo jar.

Encontré esta publicación a través de google y las respuestas anteriores no resolvieron mi problema. Espero que lo que digo sea útil para otros.

Si ve NoClassDefFoundError después de actualizar a ADT 22 , intente esto en Eclipse:

  • Vaya a Propiedades del proyectoRuta de comstackción de Java → pestaña Orden y exportación .
  • Verifique la opción Libraries Private Libraries .

Opción de bibliotecas privadas de Android

También es una advertencia para otros que se han actualizado a r17 con muchas dependencias. Tuve otro proyecto referenciado en mi ruta de comstackción y todavía no funcionó después de seguir TODAS las instrucciones sobre este problema r17 en Internet.

Descubrí después de una hora que mi proyecto referenciado usaba una versión más antigua de un Frasco externo que mi proyecto principal. Al tratar de comstackr el proyecto principal, Eclipse se daría por vencido debido a esta diferencia de versión de jar y nunca me di cuenta del mensaje de advertencia en la consola.

La solución consistía en copiar el archivo jar externo de la versión más nueva al directorio libs del proyecto al que se hace referencia.

Guau, un asesino de productividad …

Me encontré con este error hoy también, debido a la actualización de Android SDK, r17 . Lo que los enlaces que @aneal señaló no discuten es cómo manejar las bibliotecas de tiempo de ejecución externas (como las que se importan bajo su propio encabezado, no una biblioteca de usuario importada).

La forma más fácil de resolver este problema es cambiar el orden de comstackción en la ruta de comstackción. Simplemente haga clic derecho en su proyecto y seleccione Propiedades . Desde aquí, seleccione Java Build Path . En la parte superior de la pantalla, elija el orden de tabulación y exporte y mueva GoogleAdMobAdsSdk-4.3.1.jar arriba de Android X (reemplazando x con la versión que está usando). Luego, limpia tu proyecto y ejecútalo. ¡Usted debe ser bueno para ir!

La forma en que lo resolví fue: haciendo clic derecho en el proyecto y seleccionando la ruta de comstackción. Seleccione configurar ruta de comstackción en las selecciones que aparecen. Después de eso, vea si sus bibliotecas están en la carpeta de bibliotecas y luego seleccione la pestaña de orden y exportación y allí seleccione todos sus archivos jar. Luego selecciona ok y ejecuta tu proyecto.

Si está utilizando Eclipse con Maven IDE (m2e), vaya a “Java Build Path”, luego “Order and Export” y, finalmente, verifique el elemento “Maven Dependencies” y desplácelo al FONDO de la lista. Debería hacer lo mismo con las referencias de proyecto en el mismo espacio de trabajo. Cada vez que configuro el proyecto en una nueva computadora, eso sucede.