2010-03-16 18 views
7

Duplicar posible:
NoClassDefFoundError - Eclipse and AndroidMétodo para solucionar NoClassDefFoundError?

que estoy viendo esta cuestión se está pidió mucho en muchos contextos diferentes. ¿Tal vez podamos establecer algunas estrategias para localizarlo y solucionarlo? Yo no soy bueno así que todo lo que puedo contribuir son historias de terror y preguntas, lo siento ...

Parece que esto se produce cuando una clase es visible en tiempo de compilación pero no en tiempo de ejecución ... ¿cómo puede suceder esto?

En mi caso, estoy desarrollando una aplicación que utiliza las API de Google, en Eclipse, para la plataforma Android. He configurado las propiedades del proyecto/Java Build Path/Libraries para incluir gdata .jars y todo está bien. Cuando ejecuto en el emulador obtengo una fuerza cercana y el logcat muestra un NoClassDefFoundError en un nuevo ContactsService simple ("myApp"); También probé un nuevo CalendarService ("myApp") con los mismos resultados.

¿Es posible o deseable vincular estáticamente en tiempo de compilación para evitar el problema?

¿Cómo podría funcionar el enlace dinámico de una biblioteca complementaria en el entorno móvil de todos modos? ¿O tiene que estar vinculado a mi .apk o tengo que "instalarlo"? ... hmmm.

Consejo muy apreciado.

Respuesta

9

parece que esto se produce cuando una clase es visible en tiempo de compilación, pero no a tiempo de ejecución ... ¿cómo puede suceder esto?

El classpath de compilación puede incluir JAR que no están empaquetados en el APK.

¿Es posible o deseable estáticamente en tiempo de compilación se unen a evitar el problema?

Es posible, deseable y necesario.

Fuera de Eclipse, usted acaba de poner los JAR que necesita en libs/ en su proyecto, compile con Ant, y listo.

En el interior de Eclipse, un patrón que he tenido éxito con los estudiantes es poner los JAR necesarios en libs/ en su proyecto, agregarlos como JAR a la ruta de compilación (nota: JAR no externos), y se empaquetan como parte del APK. Sin embargo, tenga en cuenta que no uso Eclipse personalmente, por lo que mi experiencia con este es limitada.

+0

Con el complemento Eclipse para desarrollo de Android, todos los archivos incluidos en la ruta de compilación del proyecto se empaquetan como parte del APK (siempre que use el complemento para compilar el APK). Los frascos no tienen que estar dentro del proyecto, o en cierto directorio o algo. –

+0

Sin embargo, recientemente ha habido una serie de quejas sobre esto. De nuevo, no soy un usuario de Eclipse. He visto que hay "Agregar JAR" y "Agregar JAR externo" en la pestaña del diálogo de una ruta de compilación. ¿Hay algún impacto si eliges "Agregar JAR Externo"? – CommonsWare

+0

He estado usando "Agregar JAR externo", sí. Creé un directorio de libs y moví las instalaciones de gdata directamente en él. Luego usé "Agregar JAR" y los jars aparecen como "Bibliotecas referenciadas" y el compilador está contento. Luego hice un proyecto limpio, reinicié Eclipse y el emulador, y ejecuté. El mismo problema. Grrr. Esta cosa me está pateando .. :) Parece un error de entorno de desarrollo? – DJC

1

Cuando obtuve esto, el problema fue más profundo en la cola; El convertidor de Dalvik no pudo convertir algunas de las bibliotecas a las que se hace referencia y, sin embargo, Eclipse me permitió lanzar el proyecto.

Compruebe la consola del SDK de Android para ver si hay algún error informado.

1

En mi caso, estoy usando mi propia biblioteca (MyLib) compartida entre 2 aplicaciones. La aplicación A se cerró cuando agregué una nueva clase a la biblioteca.

Cuando abrí la Aplicación A para trabajar en ella, Eclipse reconoció la nueva clase, y pude hacer referencia a ella. Sin embargo, al correr obtuve el error.

Resultó que la carpeta de la biblioteca importada en la Aplicación A (llamada algo como MyLib_src) no reflejaba los cambios realizados en mi proyecto de biblioteca (MyLib).

  • Para resolver esto, actualicé la App A, los cambios se reflejaron, y Android pudo construir mi proyecto correctamente.

No he encontrado ninguna referencia a esta versión del problema, así que pensé en agregarlo a esta lista.

2

Para aquellos que tienen un problema, estaba teniendo el mismo error con mi aplicación. Lo que hice para resolver eso fue crear un nuevo proyecto y copiar mi recurso y las carpetas de origen junto con mi archivo de manifiesto en el nuevo proyecto (borré por adelantado aquellos dentro del nuevo proyecto creado) y listo.

Cuestiones relacionadas