2010-12-31 12 views
16

Tengo una aplicación de Android que utiliza otro proyecto como referencia de proyecto. He ido a las opciones de la aplicación, la ruta de compilación y luego he seleccionado el proyecto en las referencias del proyecto.Referencia de proyecto externo en android

todo se compila y se implementa correctamente, pero cuando intento ejecutar la aplicación y crear una instancia de una clase en ese proyecto, obtengo un java.lang.NoClassDefFoundError errrrrr.

No soy un experto en proyectos Java, así que supongo que he activado algo simple. ¿algunas ideas?

+1

con un poco más de investigación, creo que tengo que marcar los proyectos mencionados como "Es Biblioteca" en la pestaña de Android en las opciones del proyecto, pero cada vez que hago clic en eso, no persiste. si vuelvo a abrir opciones, la tiene desmarcada. –

+0

bien, revisé todo el árbol (TFS + eclipse parece ser complicado) y finalmente conseguí que Is Library persistiera, pero seguía obteniendo el NoClassDefFoundError. :( –

Respuesta

0

Es posible que deba incluir un JAR de la fuente compilada de su proyecto dependiente junto con el padre. Android necesitará los archivos de la clase para poder recompilarlos en el bytecode de Dalvik y luego ponerlos a disposición en classpath.

This video puede ayudarlo, tomado de this question.

+1

El problema con la adición de un archivo .jar es que no se actualiza automáticamente cuando se cambia el proyecto al que se hace referencia. El proyecto al que se hace referencia está en desarrollo activo, y sería un dolor horrible en el culo tener que exportarlo en un archivo jar cada vez que realizo un cambio. Pensé que ese era el objetivo principal de hacer referencia al proyecto, no al jar. Visual Studio maneja esto con facilidad. –

+1

A continuación, introduzca en sus procesos de trabajo un sistema de compilación adecuado que admita la resolución de dependencias como Maven, de modo que el JAR incluido se actualice cada vez que compile –

2

Estoy teniendo problemas similares. Tengo un proyecto antiguo que uso como espacio de nombres para algunas funciones de matemáticas y 3D. Me gustaría compartir esto entre Android y mi otro código de Java. El problema es que la maldita cosa falla tan pronto como instaneo incluso un tipo de POD de mi biblioteca. Mi proyecto externo no genera un archivo jar; solo se usa como espacio de nombres. Supongo que hay algún problema de vinculación en tiempo de ejecución que está causando esto, pero android, eclipse y java colectivamente me están dando un gran total de ninguna ayuda en absoluto.

+1

. Desde entonces he conseguido que mi código funcione, compartiendo código entre proyectos existentes. Android claramente no le gusta hacer referencia a otro proyecto de forma externa, pero si llegó a las propiedades del proyecto y vincula el código fuente de su biblioteca, puede hacer cualquier gubbins interno que necesite para que su código funcione. -> properties-> Java Build Path-> link source ... y luego agregue su biblioteca desde su directorio raíz. – Luther

+0

Tim, cuando hiciste eso, ¿arruinó tus paquetes? Lo hice y ahora espero que mis nombres de paquetes de las bibliotecas a las que se hace referencia sean src.com ... en lugar de com ... porque se está imponiendo la convención de carpeta/paquete. Intenté buscar en la carpeta/src y vincular eso, pero dice "la carpeta ya es una carpeta de origen", aunque eliminé todas las referencias a ese proyecto. –

+0

No he encontrado ese problema, aunque tuve algunos problemas con algunos conflictos de archivos de configuración de varios directorios fuente incluidos que no pude resolver, sin importar qué intenté (hay una opción para ignorar algunos archivos que no parece para trabajar en absoluto). Mis proyectos siguen la convención de paquete/carpeta internamente, por lo que probablemente sea por eso que no veo tu problema. Mientras que Eclipse es genial para trabajar una vez que está todo listo, la fase de configuración inicial puede ser un verdadero dolor. – Luther

10

Hay alguna solución para este problema. Puede consultar su biblioteca como biblioteca de Android: Haga clic con el botón derecho en la pestaña proyecto/propiedades/Android - "es biblioteca".

Y luego en su proyecto principal: Haga clic derecho en project/properties/Android tab -> Add (y agregue su proyecto de biblioteca).

Sin embargo, su biblioteca debe crearse primero como proyecto Eclipse Android (para que la sección "Android" esté disponible en las propiedades del proyecto).

He hecho eso y ya no tengo NoClassDefFoundError. Aún así, esta solución es buena para el desarrollo temprano. Si su biblioteca es estable, debe crear un jar e incluirlo en su proyecto principal (y eliminar las referencias a la biblioteca de Android).

0

Si su proyecto externo depende de otros archivos jar en su classpath, asegúrese de que se exporten y empújelos a la parte superior de la lista de exportación en Eclipse. Tuve el mismo error NoClassDef arrojado en una clase que estaba en un proyecto, pero el problema real era con el orden de exportación de los archivos en los que dependía. Funcionó bien después de que arreglé esto.

23

En Eclipse, vaya a "Proyecto Android" -> Propiedades -> Ruta de compilación Java -> Pedido y experto, luego seleccione el proyecto java que desea importar y muévalo encima de todas las entradas.

+2

Tenga en cuenta que "seleccionar el proyecto de Java" también significa activar la casilla de verificación. – sjngm

+0

Esta extraña cosa finalmente funcionó. Era importante mover el proyecto a la parte superior de la lista. – JaakL

+0

:) Me salvó algo de tiempo con este comentario. Tal simple supervisión gracias! –

1

Recientemente me encontré con un problema muy similar y posiblemente el mismo. A Android no le gustan las referencias a los proyectos y lanzará estas excepciones de reflexión si intenta que su proyecto de Android se refiera a otro proyecto.

Tampoco le gusta tener jarras en la ruta de compilación, lo que necesita hacer es exportar los proyectos que desea incluir con su proyecto de Android y colocarlos en la carpeta/libs. Esta carpeta generalmente se crea cuando se crea el proyecto, si no solo lo hace usted mismo, va en la raíz de su proyecto. Android los recogerá automáticamente si están allí.

También es muy importante, si su proyecto externo también depende de otros proyectos, también necesita exportar esos otros proyectos, y también colocar los archivos jar en la carpeta/libs del proyecto android.

Este es el caso de la última versión de Android a partir del 22/07/2012. Es posible que no se aplique si estás usando una versión anterior de Android.

2

Estoy teniendo el mismo problema. Pocas investigaciones me llevaron al Library Project, mencionado también en esta publicación. Pero tenga esto en cuenta:

"También puede designar un proyecto de Android como proyecto de biblioteca, lo que le permite compartirlo con otros proyectos que dependen de él. Una vez que un proyecto de Android se designa como proyecto de biblioteca, no puede instalado en un dispositivo. "

Puede encontrar más información:

http://developer.android.com/tools/projects/projects-eclipse.html

y también

https://groups.google.com/forum/?fromgroups#!topic/android-developers/C0pddRNGZVs

+0

Añadiendo la biblioteca con la pestaña Android hizo el truco. Es tan doloroso que haya tantas recetas para exactamente lo mismo en esta página – Eric

0

Contexto: El desarrollo de un sitio web JSP que interconecta con múltiples dispositivos Android a través de la web. Requiere clases comunes.

Las medidas tomadas:

Para el proyecto de Java que contiene las clases comunes:

1) (no hacer nada)

Para su proyecto Android App:

1) Proyecto propiedades-> Ruta de creación Java-> pestaña Proyectos-> Añadir ...

2) Propiedades del proyecto-> Referencias del proyecto-> establecer la casilla de verificación en consecuencia

3) [Como dice Matthew arriba (y era justo lo que necesitaba)] "Android-Project" -> Propiedades -> Java Build Path -> Order and Expert, luego seleccione el proyecto java que desea importar y moverlo encima de todas las entradas.

Para su proyecto JSP página web:

1) Proyecto propiedades-> Java Build Path-> Proyectos tabuladores> Añadir ...

2) Proyecto propiedades-> Proyecto Referencias-> establece check- cuadro en consecuencia

Cuestiones relacionadas