2012-03-10 15 views
12

Estoy usando Eclipse para desarrollar un juego de mesa Android. He desarrollado la interfaz de usuario en un proyecto de Android.¿Cómo incluir un proyecto de Java en un proyecto de Android?

Por otro lado, he desarrollado AI en un proyecto Java normal, porque quería poder probarlo sin todas las restricciones del emulador de Android (no encontré otra forma de ejecutar el código) usando mi Windows JVM).

Ahora llega el momento en que quiero 'unirme' a ambos proyectos (que funcionan bien independientemente), es decir, usar las clases de Java de AI desde la interfaz de usuario.

Esto es lo que he intentado:

En mi proyecto Android Propiedades> Proyectos Referencias , que cumplía el proyecto Java. Esto me permite construir sin error el proyecto Android (que crea una instancia de un objeto AI).

pero falla en tiempo de ejecución con este error:

Could not find class 'my.package.AI', referenced from method my.otherpackage.UI.onStart 

¿Cuál sería la forma correcta de incluir el proyecto Java AI en mi proyecto Android?

(NB: todavía quiero ser capaz de desarrollar y probar la IA como una aplicación regular de Java, así que creo que el uso de un frascoo copiar todas las fuentes al Proyecto Android no se adapte a mis necesidades)

EDIT:

tenía la esperanza de que el nuevo V17 ADT resolvería el problema, pero no lo hizo. He probado prácticamente todas las opciones disponibles para incluir un proyecto en mi proyecto Android:

  • Adición o vincular una carpeta de origen
  • Adición de un proyecto (Build Path Java> ficha Proyectos)
  • Adición de una Clase carpeta o una biblioteca (Vía de construcción Java> pestaña Biblioteca)
  • tictac todas las projets/bibliotecas previamente importados como exportados

La única forma que permite compilar y ejecutar sin errores es agregar el JAR del Proyecto Java a la ruta de compilación del proyecto de Android.

Respuesta

-1

No lo agregue al área de referencias del proyecto, en su lugar vaya al panel de Android (en Propiedades del proyecto), desplácese hacia abajo hasta la parte inferior y añádalo en Bibliotecas.

Esto a veces funciona, pero a veces produce problemas extraños de Eclipse (no estoy seguro por qué), en cuyo caso la copia del contenedor directamente en el proyecto parece funcionar mejor.

+0

Intenté esto, pero como * no * es un proyecto de biblioteca de Android, no puedo agregarlo al área de la Biblioteca que mencionas. –

+0

Ah, ya veo. Parece que podría ayudar http://geekswithblogs.net/cyberycon/archive/2011/05/17/using-external-libraries-with-android.aspx –

10

Referencias de proyectos solo agregue el código fuente del proyecto dependiente (su proyecto AI) como una referencia suave (tal vez débil es una palabra más precisa), su proyecto AI no se agrega a la ruta Build del proyecto Android. por lo que el actual ai.jar no se exporta a la apk final cuando Eclipse crea su aplicación.

Debe añadir proyecto de AI en Android trayectoria de la estructura del proyecto:

  1. Haga clic derecho en su proyecto androide, seleccione Vía de construcción - Configure Build Path, en la ficha proyectos (proyectos requeridos en la trayectoria de la estructura), añadir su proyecto de AI aquí.
  2. A continuación, en la pestaña Orden y exportación (compilar el orden de la ruta de clase y las entradas exportadas), marque su proyecto de AI recién agregado que apareció en la lista.

El paso 2 es probablemente opcional, esto debería agregar el proyecto AI como referencia en el proyecto de Android y exportar el ai.jar a final.apk cuando Eclipse construya su proyecto Android.

actualización 17.0.0 de ADT:

Android Dev Team acaba de liberar r17 SDK con ADT 17.0.0, que reclama para manejar estos casos de uso adecuadamente ahora:

Eclipse specific changes

The dynamic classpath container called “Library Projects” has been renamed to “Android Dependencies” as it now contains more than just Library Projects.

The container will now also be populated with Java-only projects that are referenced by Library Projects. If those Java projects also reference other Java projects and/or jar files they will be added automatically (jar files referenced through user libraries are supported as well).

Important: this only happens if the references are set to be exported in the referencing project. Note that this is not the default when adding a project or jar file to a project build path. Library Projects (and the content of their libs/*.jar files) is always exported. This change only impacts Java-only projects and their own jar files.

Again, duplicates (both projects and jar files) are detected and removed.

Más en this link .

+0

Aún obtengo la excepción ClassNotFound cuando uso su método. La única forma que he encontrado que permite ejecutar la aplicación sin error, es agregar AI.jar manualmente a la ruta de compilación (solo entonces veo que el tamaño apk aumenta significativamente, lo que significa que las clases de AI se exportan en el apk) –

+0

@Sebastien, probablemente tengas razón, el plugin Eclipse ADT tiene un ciclo de vida de construcción muy inflexible, aparentemente no lo hace No se admite la compilación automática de ningún proyecto dependiente, excepto el proyecto de la biblioteca Android, y luego se agrega automáticamente el lib.jar generado en la ruta de compilación. La única forma es agregar explícitamente el lib.jar externo en la ruta de compilación del proyecto. Sé que algunas herramientas de compilación como Maven son más flexibles y proporcionan una configuración potente en el ciclo de vida de compilación de Android. – yorkw

+0

@Sebastien, se enojó al comprobar la versión r17. – yorkw

3

Editar: Después de muchas pruebas, leyendo y encontré mi solución. El problema es (al momento de escribir esto) que no puedes hacer referencia a otro proyecto desde un proyecto de Android, aunque funciona bien para un proyecto de aplicación Java normal.

Solución para mí (Windows con sistema de archivos NTFS):
en un intérprete (derechos de administrador) hacer un enlace simbólico carpeta usando mklink /D comando apuntando a las carpetas del proyecto fuente, y refrescar en Eclipse, según sea necesario. La limitación obvia es que no puede usar los mismos nombres de paquete en el proyecto de origen y el proyecto de destino, y luego está el problema con libs en el proyecto común.

ejemplo:

cd \java\workspace\AndroidProject\src\your\package 
mklink /D common c:\java\workspace\CommonProject\src\your\package\common 

Aclaración: Usted puede referencia otro proyecto de un proyecto de Android para que se compile, sin embargo, cuando se ejecuta, las clases referenciadas desde el proyecto incluido no se ponen en el apk classes.dex (verificado con descompilador dex).

0

Usando ADT 21.0.0 64bit en Windows 7 64bit. Traté de agregar proyecto a la ruta de compilación. Marcado en el orden y la exportación, jugado con orden. Leí el official solution, el detailed explanation de esa solución, exportado como JAR, agregado a libs. No funcionó, mientras que la fuente no contenía errores. Lea en los comentarios que la solución no funcionó para todos.

Estaba harto de eso y probé una solución simple pero algo desordenada: vinculé la fuente del proyecto Java al proyecto de Android. Eso hizo el truco. Espero que esto ayude a otros también.

Cuestiones relacionadas