2011-12-24 13 views
5

He estado investigando este problema desde hace un tiempo y aún no he llegado a una respuesta clara. Estoy escribiendo una aplicación Mac OSX que tengo la intención de poner en la tienda de aplicaciones, y aunque seré capaz de escribir la mayor parte en Objective-C, necesito llamar a métodos de una biblioteca que solo está disponible en Java. Tengo 2 preguntas:Uso de una biblioteca Java en una aplicación Objective-C para Mac y puesta en el App Store de Mac

  1. De lo que he leído, parece que JNI (utilizando el Invocation API) es la única manera aceptable de hacer esto (a pesar de Apple obsoleto el uso de Java en las aplicaciones Mac y se puede no es realmente aceptable). Hay alguna otra manera de hacer esto?

  2. He leído que Apple no permite aplicaciones Java en la tienda de aplicaciones Mac, pero ¿permitirá una aplicación nativa en su mayoría que utilice JNI para incorporar algunas clases de Java? Como JNI se puede utilizar para "empaquetar" una máquina virtual Java con la aplicación, parece que el cese de Apple de incluir Java con OSX en el futuro no debería ser un problema.

Su visión será muy apreciada. Gracias.

+0

The JNI es la única forma de llamar al código Java desde el código nativo. No estoy seguro de la opinión de Apple al respecto. – zneak

+1

@zneak - no, no lo es. Puedes simplemente pagar y redireccionar el estándar. Entiendo lo que estás intentando para decir, pero está fuera del tema * y * no es completamente correcto. – Steve

+0

Como seguimiento, parece como si ugh Puedo compilar los componentes de Java que necesito hasta código de máquina nativo con algo como GCJ. Alguien sabe algo acerca de esto? – Andrew

Respuesta

3

@Andrew - en pocas palabras, si lo que estás haciendo es muy simple (y no toca las bibliotecas que usan java.awt o java.swing) entonces GCJ/could/work. No lo recomendaría en absoluto. La razón por la que digo eso es porque GCJ no es compatible con/muchas de las características java 'más nuevas' y, a menos que su código java esté escrito para una versión antigua del JDK, se encontrará con problemas de compilación. Si compila con deps externos externos, es decir, eclipse, cualquier cosa, etc. se encontrará con grandes dolores de cabeza.

Supongo que tiene un código que ya ha escrito en Java y desea aprovechar ese código como un servicio a una interfaz de usuario de objc mucho más agradable (y nativa). Si ese es el caso, sinceramente, creo que encontrará mucho más éxito y mucho menos dolor de cabeza simplemente mordiendo la bala y creando una base de código objc para su capa de servicio :(

Por supuesto, existe la opción de utilizar el nativo mac ui simplemente como un cliente ligero para una capa de servicio distribuido basado en la nube (escrito en java ofc). Pero no estoy seguro de cómo/qué manzana piensa acerca de los clientes ligeros a los servicios web en su tienda de aplicaciones.

+0

Gracias por la respuesta, Chris. Eso es más o menos lo que pensé. Desafortunadamente, la biblioteca de Java que necesito no fue escrita por mí, y no me es posible volver a escribirla en obj-C. Voy a buscar otra biblioteca que haga lo mismo en C/C++/obj-C. – Andrew

Cuestiones relacionadas