2010-07-24 8 views
13

Editar: Mi mal, quise decir objetivo-c, no C#. Alguna razón por la que me metí en la cabeza fue C# el iphone usado. Entonces las respuestas para C# fueron geniales, gracias, pero son un poco irrelevantes, lo siento.¿Existen grandes diferencias entre objetivo-c y Java, o iPhone y Android?

He echado un vistazo pero no encuentro nada que responda a esto, aunque algunos han acortado la pregunta respondiendo partes de ella. Entre un grupo pequeño, planeábamos hacer algún trabajo en iPhone y Android, los 2 separados en su mayor parte, pero ayudándose unos a otros, y con algunos chicos haciendo trabajo de gráficos repartidos entre ellos.

Pero estábamos pensando en las posibilidades de mover cosas entre los dos, no necesariamente aplicaciones, tal vez solo clases útiles o algo así. En cuanto a Objective-c y Java, parecen tener las mismas características que el mayor obstáculo sería la interfaz del sistema, por lo que nos preguntamos si, si creamos una abstracción sobre estos en cada sistema para que puedan recibir la misma información (¿a menos que esté equivocado no pondría demasiada tensión en el sistema?), ¿habría algún problema al escribir algo para convertir entre Object-C y Java, peor que las ubicaciones de los métodos en los SDK? ¿O hay características clave o algo en un idioma que el otro no tiene y que hemos perdido que significa que la única forma de hacerlo sería reescribir desde cero?

+0

Err ... Se ha mencionado un par de veces en las respuestas a continuación, pero solo para señalar ... ** iPhone está programado en Objective-C, no en C#. ** (C# es una tecnología de Microsoft, tal vez usted puede programar Windows Phone 7 en eso) – Ricket

+0

Windows Phone 7 se puede programar en C# (y solo C#, por ahora).También puede elegir entre Silverlight y XNA para la compatibilidad con la interfaz de usuario en Windows Phone 7. –

+2

En realidad, existen paquetes Mono y herramientas que admiten el uso de C# en el desarrollo de aplicaciones para iPhone, iPod Touch y iPad. –

Respuesta

0

No puede desarrollar para el iPhone en el mismo idioma que para Android. Para iPhone, solo puedes programar en Objective C, está desarrollado por Apple. No puede usarlo para Android, y la única forma de hacer el desarrollo de iPhone es con ese idioma (está en el acuerdo del usuario).

En cuanto a C# frente a Java, todo el principio es diferente. Java es un lenguaje para cada plataforma. .Net es una plataforma para cada idioma. No son compatibles. Puedes usar Java en Android, pero no estoy seguro si puedes usar C# (.Net) también.

De todos modos, tendrás que crear dos aplicaciones diferentes para estos dos sistemas operativos móviles.

+0

J ++ ya no es compatible. –

+0

Existe, sin embargo. Voy a editar para que quede más claro. –

+0

J ++ está muerto. Microsoft lo eliminó y movió a la gente al equipo de C# hace años. Todo se debe a las disputas legales entre MS y Sun. . Los lenguajes .NET se ejecutan en plataformas Unix (Mac, Linux, etc.) utilizando la plataforma de código abierto Mono, que Microsoft admite. Entiendo que están trabajando en soporte para Android. Apoyaron el desarrollo de iPhone hasta que el reciente cambio de licencia de Apple cortó todo menos el desarrollo nativo de Objective-C. –

3

Si se enfoca en abstraer cosas como las interacciones del sistema, y ​​se adhiere al subconjunto común de los idiomas, probablemente pueda construir clases que requerirían poca o ninguna modificación para pasar de un idioma a otro.

C# tiene una mejor implementación de genéricos que Java, en que los genéricos de C# retienen el tipado fuerte en tiempo de ejecución.

C# también tiene LINQ, que hasta donde sé no tiene equivalente (todavía) en Java. LINQ proporciona una capacidad de consulta similar a SQL, integrada en el lenguaje y totalmente compatible con .NET frameowrk, que le permite consultar colecciones de objetos, y lo hace en un estilo de lenguaje muy funcional. Los proveedores de consultas pueden ampliar LINQ para que trabaje con otros formatos de datos, como XML y SQL, una vez que el proveedor de consultas proporciona un modelo de objetos que se traduce al otro formato. LINQ también hace que la paralelización sea muy fácil para trabajos de múltiples núcleos. Es una gran extensión a la capacidad del lenguaje.

0

Si está pensando en desarrollar Android, mi mejor consejo es ir a por Java. No hay ningún beneficio en escribir una capa de abstracción completa (suponiendo que puedas) para convertir de C# a Java. En cuanto al desarrollo del iPhone, no dude de usar Objective-C para el mismo propósito.

4

herramientas como XMLVM, Codename One y iSpectrum nos dicen que en realidad se puede cross-compilar código Java (de una aplicación o la creación de un androide desde cero) al código Objective-C que se ejecuta en un iPhone sin tener que instalar ninguna máquina virtual del lado de Apple.

que sugieren viendo Developing iPhone Applications using Java

Desafortunadamente acuerdo de licencia de Apple para el iPhone SDK prohíbe la portabilidad de la máquina virtual de Java al iPhone. En esta presentación introducimos un Open Source de Java a Objective-C compilador cruzado, así como una basada en Java implementación de la biblioteca de cacao. Con la ayuda de estas herramientas, las aplicaciones de iPhone se pueden escribir en puro Java. El uso de la versión Java de cacao, es posible ejecutar una aplicación de iPhone basado en Java como una aplicación de escritorio /applet de Java que puede ser -cruz compilado para ejecutarse de forma nativa en el iPhone . En la charla se analizarán los desafíos del compilador cruzado Java-to-Objective-C , así como la versión basada en Java de Cocoa. Detalles están disponibles en http://www.xmlvm.org/

y para una visión más clara una charla más reciente acerca de la compilación cruzada aplicaciones Android al iPhone de Frebruary 2010 está disponible here, que se documenta en http://www.xmlvm.org/android/:

Android es una plataforma de código abierto para dispositivos móviles. Iniciado por Google, Android ha recibido mucha atención. Las aplicaciones de Android se desarrollan con Java, aunque un compilador especial convierte los archivos de clase en una máquina virtual patentada y registrada que se usa en dispositivos Android para ejecutar aplicaciones. Android define su propia API para escribir aplicaciones móviles. Con la ayuda de XMLVM, es posible compilar en forma cruzada aplicaciones de Android basadas en Java para aplicaciones nativas de iPhone.

La aplicación de Android está escrita en Java y hace uso de una API específica de Android . XMLVM ofrece una biblioteca de compatibilidad , escrita en Java, que ofrece la misma API que Android, pero solo hace uso de la API basada en Java para Cocoa Touch. Durante el proceso de compilación cruzada, tanto la aplicación y la biblioteca de compatibilidad Android son cruzada compilado de Java a de Objective-C y vinculado con la biblioteca de compatibilidad Cocoa Touch para producir una aplicación nativa para el iPhone .

De la conversación 2008 sobre la construcción de aplicaciones Java para el iPhone http://www.xmlvm.org/iphone/:

iPhone de Apple ha generado gran interés entre usuarios y desarrolladores por igual . Al igual que MacOS X, el entorno de desarrollo de iPhone se basa en Objective-C como el lenguaje de desarrollo y Cocoa para la biblioteca de la GUI . El acuerdo de licencia de iPhone SDK no permite el desarrollo de una máquina virtual. Al usar XMLVM, eludimos este problema mediante la compilación cruzada de Java con el iPhone . Al igual que una aplicación Java puede compilarse en forma cruzada con AJAX, XMLVM se puede utilizar para realizar una compilación cruzada de una aplicación Java a Objective-C. La compilación cruzada también se realiza al imitar una máquina basada en pila en Objective-C.

+2

Exactamente por qué decidí omitir el desarrollo de iphone ... sin mencionar que debes tener fuertes mandíbulas y propensión a proporcionar estimulación oral a Apple para obtener una aplicación aprobada. – androidworkz

+0

No siempre tiene que hacer las cosas de la manera difícil. – overboming

+0

No es tan difícil obtener una aplicación aprobada. –

1

Si realmente quiere hacer el desarrollo transversal de teléfono, con tal de que no es algo muy costoso computacionalmente, probablemente me vaya con PhoneGap.

PhoneGap es un marco de desarrollo de código abierto para crear aplicaciones móviles multiplataforma. Cree aplicaciones en HTML y JavaScript y aproveche aún las funciones principales de los iPhone/iTouch, iPad, Google Android, Palm, Symbian y Blackberry SDK.

Por lo que yo puedo decir, que es más o menos el único conjunto de herramientas multiplataforma que se permite en la tienda de aplicaciones iPhone.

Si no está preparado para el desarrollo nativo, creo que encontrará que, a menos que esté haciendo un juego y tenga como objetivo c, le resultará mucho trabajo realizar un port. Los marcos son muy diferentes y la forma de construir UI es muy diferente. Dicho esto, para responder a su pregunta directa de objetivo-c vs. java, no es tan malo. Sin embargo, es lo suficientemente diferente como para que una herramienta de abstracción no sea tan fácil, no como Java vs C#. Objective-c no tiene recolección de basura (en el iPhone de todos modos), por ejemplo, y la sintaxis es muy diferente. Objective-c se escribe de manera más flexible en la forma en que realiza llamadas de método (mensajes en el objetivo c). Dicho esto, no son muy diferentes en términos de paradigmas de programación. Ambos son lenguajes imperativos orientados a objetos. Ambos tienen clases y métodos, públicos y privados. Si quisieras portar el código a mano, no sería el fin del mundo, solo creo que podrías terminar gastando mucho más tiempo tratando de construir una capa de abstracción.

+1

Similar a PhoneGap es Titanium (http://www.appcelerator.com/) que le permite crear aplicaciones * nativas * para dispositivos móviles y de escritorio con tecnologías web. No sé si Java estará disponible para iPhone, iPad, pero C# a través del proyecto http://monotouch.net/ ya está allí y se aceptan varias aplicaciones, consulte http://monotouch.info/MonoTouch/Apps – bitek

+0

Solo proyecto descubierto e interesante llamado iSpectrum, (además del proyecto XMLVM ya descrito en la sección de respuestas) que le permite crear aplicaciones Java para iPhone, consulte http://www.flexycore.com./ispectrum-overview.html – bitek

52

No perdería el tiempo tratando de encontrar algo en común entre iOS y Android.

multiplataforma es casi siempre una pérdida de tiempo y recursos a menos que la capacidad multiplataforma sea fundamental para el funcionamiento de las aplicaciones. Eso es especialmente cierto para plataformas como iPhone y Android que tienen un sistema operativo personalizado y trabajan muy estrechamente con el hardware.

Los entornos de desarrollo multiplataforma añaden, en lugar de reducir, la complejidad a largo plazo. Sí, suena ordenado, pero por lo general obtienes el 90% de lo que deseas con facilidad y luego tocas una barricada que destruye todos los ahorros que hiciste y luego comienza a ponerte en el hoyo. Simplemente hay muchos compromisos y clavijas cuadradas en agujeros redondos.

A menos que su aplicación pueda en teoría funcionar desde una página web genérica, multiplataforma no es para usted.

En el caso específico de Objective-C y Java, aunque Java desciende de Objective-C, no tienen interoperabilidad moderna. No puedes usar el código de uno en el otro.

Debe pasar el tiempo para aprender la API específica de cada plataforma. No hay atajos.

+4

Esto es sabio consejos para interfaces de usuario cruzadas, pero no todos los códigos multiplataforma. – jamesh

+2

Muy, muy mejor consejo. Y muy ordenado para seguir adelante. Pero las personas que ya querían hacer plataformas cruzadas no lo aceptarán ... –

3

Este tema a menudo está lleno del dogma de la tecnología de los yihadistas, por lo que intentaré evitarlo en mi respuesta.

En mi experiencia, estoy de acuerdo en gran medida con la gente que dice que tratar de compartir el código entre las dos plataformas sería difícil. Sin embargo, hay algunas excepciones importantes:

yo consideraría el desarrollo multiplataforma donde su lógica de negocio:

  • no es trivial;
  • debe estar estandarizado en todas las plataformas; y
  • tiene interacciones bien definidas con el mundo exterior (por ejemplo, la pila de la red o la interfaz de usuario).
  • (bonus) ya está escrito.

Apple es el paso que determina la tasa aquí, dadas las ya infames restricciones 3.3.1 en los lenguajes de código fuente. Puede escribir código en Javascript de acuerdo con Webkit incluido, C, C++ y Objective C.

Si no desea instalar idiomas adicionales en un 'droide, puede usar el Java que compila hasta el código dalvik, el Javascript según la compilación ligeramente diferente de webkit o algo del NDK. Entonces mirarás C/C++. Podría compilar de forma cruzada Objective-C, pero no he tenido ninguna experiencia al respecto.

La separación clara de la lógica de negocio de la interfaz de usuario y la conexión en red es importante, ya que buscará escribir adaptadores para la capa de red, algo más para la interfaz de usuario.

yo no intentará escribir cruz plataforma código de interfaz de usuario en C/C++, y sería ya sea escribir algo que utiliza HTML/CSS/JS, o más probablemente escribir algo completamente personalizada para tomar ventaja de las diferentes metáforas de interfaz de usuario en cada plataforma, por ejemplo no hay análogo a la barra de notificaciones en el iPhone. La animación en el iPhone es mucho más sencilla de implementar que en Android.

Si no necesita que la IU esté masivamente integrada con el SO, entonces una vista web y algo de HTML5 pueden ser suficientes. Titanium es una buena opción aquí, y mis colegas informados me dicen que es mejor (es decir, compila, no interpreta) que PhoneGap. De nuevo, no sé.

Yendo para el otro lado en complejidad, Open GLES está disponible en ambas plataformas.

También se debe tener en cuenta que SVG no está disponible en la cosecha actual de sistemas operativos Android.

Cuestiones relacionadas