NoClassDefFoundError - Eclipse y Android


193

Tengo un problema al intentar ejecutar una aplicación de Android que, hasta agregar una segunda biblioteca externa a su ruta de compilación, funcionaba bien. Desde que agregué el scoreninja jar, ahora obtengo un NoClassDefFoundError cuando intento ejecutar la aplicación.

Aquí está el mensaje:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

Como todos los scripts de compilación son generados por las herramientas de Android (?), No estoy seguro de qué más puedo hacer aparte de limpiar y reconstruir o reiniciar eclipse (ya he probado los tres). ¿Alguien sabe cómo puedo modificar esto?


1
¿Cómo agregaste el archivo jar? ¿Agregaste usando la ruta de compilación -> Bibliotecas -> Tarros externos?
Teja Kantamneni

1
Haga clic con el botón derecho en el proyecto> Crear ruta> Agregar archivos externos ... según las instrucciones aquí: scoreninja.appspot.com
Tom R

44
Si actualizó ADT recientemente, mire la respuesta de John a continuación (¡y vote por ella!) Stackoverflow.com/a/9916751/489852
Atul Goyal

1
Si tiene este problema, antes de saltar directamente a la respuesta de John, la respuesta de @Till a continuación también lo está resolviendo para mucha gente, incluido yo mismo.
Carlos P

¿Probaste multidex?
Ashish Rawat

Respuestas:


234

Tuve este problema después de actualizar ADT.

Estaba almacenando todos mis archivos JAR en una carpeta llamada "lib" y agregando los frascos a la ruta de compilación de la forma normal de Eclipse. Esto funcionó bien hasta mi actualización.

Después de mi actualización, estaba obteniendo NoClassDefFoundError para una clase que pude ver claramente que estaba incluida en el jar (revisando las clases de las Bibliotecas de referencia).

La solución fue eliminar mis jarras de la ruta de compilación y cambiar el nombre de mi carpeta "lib" a "libs". Esta es una convención de hormigas, y parece ser la forma en que el nuevo ADT encuentra e incluye bibliotecas en un archivo .apk. Una vez que hice esto, todo funcionó bien.


1
¡Muchas gracias! No tenía una lib ni una carpeta libs antes de la actualización ADT de ayer, y todo funcionó bien. Después de la actualización, todos los archivos jar externos tuvieron este problema. Se han solucionado gracias a su respuesta. Tengo que combinar el tuyo con el de Brian para que funcione.
Hong

Gracias John! Agregaré que después de cambiar la carpeta a libs tuve que reiniciar eclipse para que funcione.
Michaeldcooney

55
Me encontré con el mismo problema después de actualizar ADT, pero mantenía mis jarras en un directorio fuera de mi proyecto y las incluía como una Biblioteca de usuario en mi ruta de compilación. La solución fue eliminar la biblioteca de usuario de mi ruta de compilación y en su lugar incluir frascos usando "Agregar frascos externos", y luego exportarlos marcando las casillas de verificación en la pestaña "Ordenar y exportar".
Travis

1
Estaba haciendo referencia a android-support-v13.jar como una biblioteca externa en C: \ android-sdk-windows \ extras \ android \ compatibilidad \ v13. Moví ese JAR a la carpeta libs del proyecto y eliminé la referencia de Java Build Path -> Bibliotecas. Una construcción limpia y me iba de nuevo.
Snowwire

Hola. probé nuestro enfoque agregando las bibliotecas jar externas dentro / libs y ahora recibo este error: la conversión al formato Dalvik falló con el error 1
Jonathan

100

No tuve que poner la biblioteca jar en activos o lib (s), pero solo marque la casilla de este jar en Propiedades -> Ruta de compilación Java -> "Ordenar y exportar" (se enumeró antes, pero no se seleccionó )


¡Muchas gracias! Había estado luchando con este error durante mucho tiempo y todo lo que tenía que hacer era marcar la casilla maldita del frasco en la pantalla "Ordenar y exportar". Lo curioso es que solo tuve que hacer esto para que funcionara en un emulador de Nook Tablet. No tuve ningún problema en dispositivos u otros emuladores.
Luis

55
¿Alguien sabe por qué tiene que hacer ambas cosas, agregar la biblioteca y también seleccionar la casilla de verificación en Ordenar y Exportar? ¿Hay alguna razón por la que quisiera agregar un JAR externo pero no incluirlo en la Orden y Exportar?
Lou Morda

Tuve este problema después de actualizar ADT y esto lo resolvió por mí.
cdavidyoung

55
Me ayudó, pero solo después de que hice Project -> Clean
altumano

¡¡Gracias!! Me salvó. Tuve que hacer una limpieza y reiniciar después de instalar Eclipse Juno.
Rynardt

68

Al agregar el jar externo a su ruta de compilación, solo agrega el jar a su paquete, pero no estará disponible durante el tiempo de ejecución.

Para que el jar esté disponible en tiempo de ejecución , debe:

  • Pon el frasco debajo de tu assetscarpeta
  • Incluya esta copia del jar en su ruta de compilación
  • Vaya a la pestaña de exportación en la misma ventana emergente
  • Marque la casilla con el frasco recién agregado

ScoreNinjaAdapter es el código de otra persona, pero me sorprendería mucho si contuviera un error tal como es de uso común. El error ocurre en un punto de mi propio código.
Tom R

El error literalmente ocurre aquí: sna = new ScoreNinjaAdapter (esto, SN_APP_ID, SN_APP_KEY);
Tom R

¿Necesita una importdeclaración para archivos jar externos? Nunca los he usado.
Anthony Forloney

¿Has intentado eliminar el archivo .jar del assestsenfoque de carpeta?
Anthony Forloney

Si. Al final, me cansé de todo esto y simplemente descargué la fuente y copié los archivos fuente en mi proyecto. No es la mejor solución, pero funciona ahora. Gracias por toda tu ayuda.
Tom R

48

Tenía esto para MapActivity. Las compilaciones en Eclipse obtienen NoClassDefFound en el depurador.

Olvidé agregar la biblioteca al manifiesto, <Application>...</Application>elemento interior

<uses-library android:name="com.google.android.maps" />

27

He cambiado el orden de los proyectos incluidos (Eclipse / Configurar ruta de compilación / Ordenar y exportar). He movido mis dos proyectos dependientes a la parte superior de la lista "Ordenar y Exportar". Se resolvió el problema "NoClassDefFoundError".

Es extraño para mi No escuché sobre la importancia del orden de las bibliotecas y proyectos incluidos. Android + Eclipse es divertido :)


Esta es también la solución mencionada por el segundo comentario del usuario aquí en el bugruport: code.google.com/p/android/issues/detail?id=55304
arberg

15

No estoy seguro de si esto está relacionado, o si aún está buscando una respuesta, pero me encontré con este hilo al intentar investigar el mismo error (pero posiblemente por diferentes razones).

No pude encontrar ninguna solución en línea, pero una respuesta en un hilo similar me hizo pensar y me di cuenta de que probablemente solo necesitaba reconstruir (o limpiar) el proyecto.

En Eclipse, vaya a Proyecto => Limpiar. Seleccione su proyecto y Eclipse pareció solucionarlo por sí mismo. Para mí esto resolvió el problema.

Espero que esto ayude.


Sí, parece haber un error en Eclipse / ADT / dex / lo que sea que básicamente pierda clases en la compilación. También puede perder la Applicationclase que conduce a un error diferente.
Timmmm

13

He encontrado el mismo problema. La razón fue que la biblioteca que estaba tratando de usar había sido compilada con un JDK 7 estándar.

Lo volví a compilar con las -source 1.6 -target 1.6opciones y funcionó bien.


GRACIAS YOUUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!! ¡Me ha frustrado este problema y lo resolvió! Es un poco irónico que incluso el último SDK Jelly Bean 4.3 (API 18) todavía no puede leer 1.7 JAR / clases. Y lo peor de todo es que no se queja en absoluto :(
Hendy Irawan

Estaba teniendo el mismo problema. Lo peor de todo es que pensé en esta opción y luego cambié mi -source 1.7 con -source 1.5 (para estar seguro) y el problema no se resolvió. Pero, después de leer su comentario, intenté nuevamente con 1.6 y luego, funcionó de maravilla.
Pedro Náñez

7

Lo mismo funcionó para mí: Propiedades -> Ruta de compilación de Java -> "Ordenar y exportar" Curiosamente, ¿por qué esto no se hace automáticamente? Supongo que falta alguna configuración. También esto me sucedió después de la actualización del SDK.


3

Haga clic con el botón derecho en la carpeta del proyecto, busque Propiedades en la ruta de compilación de Java y seleccione los archivos jar que ve. Esto ha funcionado para mí.



2

Intenté todo desde esta publicación (y algunas otras publicaciones), y no funcionó para mí, esta es, con mucho, la actualización ADT más terrible que he experimentado, y nunca lo haré sin una copia de seguridad ADT que funcione.

Logré resolverlo eliminando el proyecto y luego agregándolo nuevamente usando una copia de seguridad de origen que tenía.


2

Tuve este mismo error con ADT22. Se resolvió marcando "Bibliotecas privadas de Android" en propiedades -> Ruta de compilación de Java -> Ordenar y exportar. Si está utilizando proyectos de biblioteca, también se debe hacer lo mismo para ellos.


También me funcionó. Incluí la biblioteca pero olvidé verificarla en "Ordenar y exportar". ¡Gracias!
jmrodrigg

2

Todas las respuestas existentes no funcionan para mí porque mi caso es un poco diferente. Me llevó unas horas ponerlo a trabajar. Estoy usando Eclipse.

Mi proyecto de Android incluye otro proyecto normal de Java 1.6, que necesita un archivo jar de terceros. El truco es:

  • incluye el jar en el proyecto normal de Java para que se compile (solo), no lo verifiques en la pestaña "Ordenar y Exportar"
  • también copie este archivo jar en la carpeta "libs" del proyecto de Android para que esté disponible en tiempo de ejecución

Espero que esto ayude a aquellos que tienen escenarios similares como el mío.


1

a veces tienes que tomar todo el proyecto externo como biblioteca y no solo el jar:

mi problema se resolvió agregando todo el proyecto (en mi caso google-play-services_lib) como biblioteca y no solo el jar. los pasos para hacerlo (de @style answer ):

  1. Archivo-> Nuevo-> Otro
  2. Seleccionar proyecto de Android
  3. Seleccione "Crear proyecto a partir de una fuente existente"
  4. Haga clic en el botón "Examinar ..." y navegue hasta el proyecto deseado
  5. Finalizar (ahora proyecto de barra de acción en su espacio de trabajo)
  6. Haga clic derecho en su proyecto -> Propiedades
  7. En la sección Android-> Biblioteca, haga clic en Agregar
  8. seleccione proyecto agregado recientemente -> Ok

1

A veces sucederá debido a que no incluye jar, de la que tiene dependencia, con la etiqueta "uses-libary" en su AndroidManifest.xml.

Además, asegúrese de que esté dentro de la etiqueta "aplicación".

Saludos,

Ravi


1

Tuve este problema y fue causado por no "exportar" la biblioteca. El problema se debió simplemente a que los archivos .class para algunas clases no están disponibles al empaquetar el APK. El tiempo de compilación funcionará bien sin expirar

En mi caso, estaba usando la clase "CusrsorAdapter" y en "JavaBuildPath-> Order and Export" no verifiqué el soporte V4 jar. Una vez que se seleccionó, el problema desapareció.

Para asegurarse de que no obtiene el error noClassDefFound por la razón anterior, verifique su logacat, verá un error desconocido de superclases en tiempo de ejecución.



0

Intenté varias cosas y la razón del error en mi caso fue un conflicto entre maps.jar y Google Api en Java Build Path-> Libraries. Entonces, cuando eliminé el maps.jar funcionó bien.

Saludos,

wahib


0

asegúrese de que su archivo jar esté en el directorio libs de su proyecto, ya que está utilizando una versión ADT más nueva con su eclipse.


0

Tengo exactamente el mismo problema ... Para solucionarlo, simplemente eliminé mis Libs privadas de Android en "ruta de compilación" e hice clic en Aceptar ... y cuando abrí la "ruta de compilación" nuevamente, eclipse los había agregado nuevamente, y luego funcionó para mí;) ...


0

Pasé dos días tratando de resolver este problema después de actualizar ADT. Finalmente tuve la suerte de obtener esta publicación aquí:

https://code.google.com/p/android/issues/detail?id=55304

lo que me llevó en la dirección correcta. cuando siga la solución, recuerde reemplazar la biblioteca de soporte de Android de todos sus proyectos por la misma versión (elimínela y vuelva a instalarla en los proyectos). Espero que esto ayude, buena suerte


0

Si prefiere saber con qué archivos está relacionada la solución alternativa, esto es lo que encontré. Simple cambie el archivo .classpath a

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Reemplace el archivo .classpath en todos los proyectos de biblioteca y en el proyecto principal de Android. El archivo .classpath está en la carpeta raíz del proyecto eclipse. Por supuesto, no olvide agregar sus propias entradas de classpath, en caso de que tenga alguna (así que compare con su versión actual de .classpath).

Creo que este es el mismo resultado que pasar por los menús de eclipse como explicó anteriormente el usuario componavt (Eclipse / Configurar ruta de compilación / Ordenar y exportar).


0

La solución aquí funcionó para mí. Se trata de importar la biblioteca a la carpeta libs, luego modificar el archivo build.gradle y luego limpiarlo con gradlew.


0

Si cambia su orden y exporta en la ruta de compilación de su proyecto, este error no ocurrirá. La otra forma de lograrlo es a través de .classpath en la carpeta de su proyecto.


0

Prueba esto:-

Paso 1

Agregue todas las bibliotecas para construir pat en Eclipse (significa hacer que todas las bibliotecas hagan referencia a bibliotecas)

Paso 2

Elimine el archivo R.java y vuelva a compilar el proyecto. No te preocupes, R.java se recreará automáticamente.

Relajarse :)


0

Como entendí, su proyecto no muestra errores, porque incluyó el Jar. Pero el Jar no se utilizará cuando su Proyecto se "exportó" al dispositivo. Prueba esto

Proyecto -> Propiedades

Java Build Path / Ordenar y Exportar

[✔] Tu frasco


0

Esto me pasa muy a menudo.

La última vez que sucedió, puedo recordar que fue causada al cambiar el Eclipse ADT (edición especial de Google) a Android Studio, y volver a cambiar. Básicamente probé todos los métodos que puedo encontrar en stackoverflow que no me funcionaron.

Finalmente, conseguí que la aplicación volviera a funcionar (no más NoCalssDeffoundError) cambiando mi IDE a Eclipse original (Kepler) con ADT.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.