2012-03-23 15 views
15

Me he encontrado con un error extraño. Tengo un proyecto de Android que utiliza bibliotecas externas, en particular:Android Eclipse NoClassDefFoundError para archivos externos .jar

  • android-apoyo-v4.jar (Fragmento de apoyo en Android 1.6)
  • GoogleAdMobAdsSdk-4.3.1.jar (para los 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 del archivo .jar anterior archivos (o cualquiera de sus subclases, incluso los definidos 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.

Respuesta

35

Tiene que leer esto - Dealing with dependencies in Android projects.

Este enlace es también útil - ClassDefNotFoundError with ADT 17

Básicamente, crear una carpeta llamada libs y colocar todos los archivos dentro de jar. La actualización más reciente se encargará automáticamente del resto por usted. Ya no necesita editar su ruta.

+0

Realmente no sé por qué cambiaron ADT para comportarse de esta manera ya que estas bibliotecas se compartirán entre varios proyectos. Pero al menos esta será una solución a corto plazo. – Dan

+0

¡Muchas gracias! – AVEbrahimi

+5

Esto no funcionó para mí .. usando ADT 20 – Cheluis

0

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 compilación en la ruta de compilació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 la pestaña y exporte y mueva GoogleAdMobAdsSdk-4.3.1.jar anterior Android X (reemplazando x con la versión que está utilizando). Luego, limpia tu proyecto y ejecútalo. ¡Usted debe ser bueno para ir!

1

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

Me enteré después de una hora de que el proyecto al que me refería usaba una versión anterior de un Frasco externo que mi proyecto principal. Al tratar de compilar 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 la versión más reciente del archivo jar externo al directorio libs del proyecto al que se hace referencia.

Guau - un asesino tan productividad .....

7

Android no soporta 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 solucionaron mi problema. Espero que lo que digo sea útil para otros.

+0

Esto resultó ser mi problema. Recopilé con 1.6 y listo! Usé "javac -source 6 -objetivo 6 ..." – Jason

0

La manera en que lo resolví fue haciendo clic derecho en el proyecto y seleccionando la ruta de compilación. Seleccione configurar ruta de compilació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.

7

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

  • Ir a Propiedades del proyecto Vía de construcción JavaOrden y exportación pestaña.
  • Compruebe la bibliotecas privadas de Android opción.

Android Private Libraries option

+0

Eso es lo que hizo el truco para mí. Muchas gracias ! – Vahron

0

Si utilizas Eclipse IDE con Maven (M2e) ir a "Java Build Path" y luego "Orden y de exportación" y, finalmente, comprobar el artículo "Maven" Dependencias y tire de él hacia abajo para el 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 computadora nueva, eso sucede.

Cuestiones relacionadas