android ios cross-platform airplay marmalade

Desarrollo nativo de Android/iOS vs Marmalade SDK



cross-platform airplay (6)

Nuestra empresa está a punto de elegir entre el desarrollo nativo de Android / iPhone y alguna solución multiplataforma, específicamente Marmalade SDK (anteriormente Airplay SDK).

Somos una empresa de visión artificial, lo que significa que necesitamos acceso de bajo nivel a los dispositivos de cámara. Además, nuestras aplicaciones son computacionalmente caras, lo que significa que tendemos a exprimir cada poquito la potencia de procesamiento disponible.

Nuestro equipo tiene experiencia suficiente en Objective-C y Java (o C) para proporcionar soluciones específicas para la plataforma. Sin embargo, nuestro enfoque principal fue siempre en C ++, por lo que nos gustaría evitar la fragmentación del equipo y trabajar con una solución multiplataforma.

Nuestro mayor temor es que la elección de Marmalade sacrifique la velocidad de procesamiento (preocupación principal) o aumente el tiempo de desarrollo al complicar el acceso de bajo nivel al búfer de cuadros.

Por lo tanto, mi pregunta es, además de lo obvio, cuáles son las ventajas, pero específicamente las limitaciones de Marmalade SDK para aplicaciones de procesamiento de video de procesamiento intensivo.


He usado Marmalade / Airplay durante casi dos años en mi compañía de juegos indie. Para mí es una victoria porque solo soy un programador, y puedo hacer prácticamente todo mi trabajo en Windows usando MS Dev Studio (que es mi entorno de desarrollo favorito por mucho) y porque me protege de tener que lidiar con muchos. los detalles específicos de la plataforma, especialmente con las diversas herramientas de desarrollo, que podrían consumir la mayor parte del tiempo que preferiría dedicar al contenido del juego.

La velocidad no será un problema con la mermelada. Su código de C ++ se ejecuta de forma nativa. Además, el acceso a la cámara y otras funciones no deberían ser un problema; Ya se proporcionó o se puede agregar usando el SDK de extensiones, que es bastante sencillo de usar.

Marmalade es un producto maduro y la compañía es bastante útil para resolver problemas rápidamente, incluso para desarrolladores independientes que usan el producto de forma gratuita. Además de la plataforma cruzada, tiene algunas herramientas agradables integradas, como un rastreador de fugas de memoria, un sistema de registro, herramientas de análisis de gráficos y otros.

Hay algunas desventajas que he experimentado con la mermelada.

  1. Aunque en teoría se puede acceder a cualquier API o SDK de terceros a través del sistema de extensiones, en la práctica es posible que lo que necesita todavía no exista. Como ejemplo, varios desarrolladores actualmente están luchando para obtener el paquete de análisis Flurry integrado, y ha sido un desafío para algunos. La situación es similar con muchos otros SDK de terceros; pueden ser solo un par de líneas para integrar si está haciendo el desarrollo de Objective-C, pero puede ser más difícil a través de Marmalade.

  2. Algunas cosas son menos naturales debido a la capa multiplataforma a través de la cual opera. Algunos ejemplos para mí han sido:

    • He tenido problemas para que mis pantallas de inicio (pantallas de inicio de aplicaciones) se muestren correctamente en todos los tamaños de pantalla tanto en iOS como en Android. Y ha sido difícil hacer que se vean sin algunos parpadeos, cortos periodos de apagón o cambio de tamaño de las imágenes mientras transita entre la carga del dispositivo de la aplicación Marmalade, y luego el paso de Marmalade de cargar el código de la aplicación.

    • Marmalade impone un modelo de memoria muy simple, donde se obtiene un montón fijo por adelantado, y toda la asignación de memoria se realiza a través de Marmalade. Desde el punto de vista del sistema, la aplicación solo tiene y mantiene un gran bloque (o unos pocos bloques grandes) de memoria. Esto tiene algunas ventajas, pero he tenido problemas para cuadrar este modelo con el modelo de iOS, por ejemplo, recibir advertencias de memoria y se espera que elimine cualquier recurso innecesario. Parece ser un caso en el que "una talla para todos" termina perdiendo alguna funcionalidad clave.

    • Puede usar el administrador de extensiones y algunos otros métodos para mostrar elementos de la interfaz de usuario nativos, pero la integración de una cantidad significativa de la interfaz de usuario nativa puede ser un desafío. Entonces, si tu aplicación es similar a un juego y los usuarios pueden lidiar con botones no estándar, etc., está bien, pero si anticipas que necesitarás una interfaz de usuario nativa significativa, es más difícil. [editar: las versiones recientes de Marmalade han agregado un marco de IU nativo que le permite especificar elementos de UI estándar de una manera genérica y luego implementa el uso de los widgets adecuados para el dispositivo. No he usado esto, pero parece bastante completo.]

  3. Si tiene problemas, a menudo no está claro si se trata de un problema genérico del sistema operativo o de Marmalade, y puede ser difícil tratar de encontrar ayuda. Por ejemplo, recientemente agregué la compra desde la aplicación a mi juego, tanto en iOS como en Android. IAP es un desafío, e incluso sin una capa SDK adicional, hay muchos casos especiales con los que tratar. En mi caso, tuve una situación en la que mi aplicación había sido rechazada por Apple por un pequeño problema, y ​​mientras estaba en el estado rechazado, mi compra dentro de la aplicación también se encontraba en un estado "rechazado" (aunque no hubo nada roto) el IAP en sí, esto es solo una peculiaridad del proceso de Apple). Cuando intentaba realizar una prueba de regresión de la funcionalidad de compra en la aplicación (mientras estaba enviando la solución para este problema no relacionado con la compra de la aplicación), el juego realmente se bloqueaba, en lugar de obtener un resultado de error adecuado. Pude determinar que la falla no estaba en el código de mi juego, así que fue el sistema operativo (poco probable) o la capa intermedia de Marmalade para manejar las devoluciones de llamadas de compra en la aplicación (que es lo que resultó ser [actualización 11 / 28/2012: Marmalade ha solucionado este problema en una actualización reciente del SDK]).

    Entonces, en una situación como esa, puedes intentar usar para obtener ayuda, pero en realidad nadie está ahí para ayudarte, por lo que dependes del equipo de Marmalade para responderte. Como digo, hacen un buen trabajo en esto, pero no hay forma de que pueda competir con respuestas casi instantáneas en de la comunidad mundial de programadores regulares de iOS. Así que diría que esta última es mi mayor preocupación con el uso de un sistema como Marmalade. Le ahorra tiempo desde el principio al no tener que ponerse al día con los detalles de los diversos SDK de la plataforma, pero cuando tiene problemas, está "a merced" del equipo de Marmalade (o miembros de la comunidad de Marmalade) para volver a usted con una respuesta. (Tenga en cuenta que estoy escribiendo como un desarrollador independiente independiente que solo tiene prioridad estándar para la resolución de problemas. Puede pagar para obtener una resolución rápida garantizada). Para mí, personalmente, ha sido difícil tener que volver con mi productor y diciendo "Estoy esperando una respuesta de los tipos de Marmalade en este".

    (Otro ejemplo del problema 3 es que hasta hace poco hubo un problema con los efectos de sonido que se retrasaban en ciertos dispositivos Android. Era un problema de Marmalade y finalmente lo resolvieron, pero tardaron un tiempo y básicamente no hay nada que puedas hacer. mientras tanto.)

Tenga en cuenta que (como han señalado otros respondedores), incluso sin Marmalade, todavía puede tener la mayor parte de su código base en C ++ en iOS o Android.

A pesar de la larga lista de posibles problemas mencionados anteriormente, soy un fanático de Marmalade, y aprecio todo lo que la compañía me ha proporcionado de forma gratuita. La herramienta realmente brilla cuando se trata de otras plataformas con las que nunca te hubieras molestado, como (para mí) bada o PlayBook. Realmente puede implementarlo en una amplia gama de dispositivos desde la comodidad de su PC y Developer Studio (o desde una Mac con xcode, si desea hacer su vida un poco más difícil). La herramienta de simulación que tienen es excelente, y solo ha habido un pequeño número de instancias en las que he tenido que depurar el propio dispositivo; en general, si funciona en el simulador simplemente funciona. IdeaWorks ha asumido un gran desafío y está haciendo un gran trabajo combinando todas estas características (es decir, básicamente todas las características que se ofrecen en un dispositivo móvil) en todas estas plataformas (es decir, todos los dispositivos importantes que existen, con la excepción de Windows Phone 7 porque actualmente no permite código nativo). Sólo viene con algunas advertencias.


La mermelada no es mala, la usé en 2013. Algunos errores, algunas molestias (conjuntos de memoria fija), pero en general no es una mala experiencia.

La única decepción real es la falta de soporte para Linux. No puedo ver cómo los chicos de Marmalade pueden soportar plataformas oscuras como Blackberry, pero no Linux; no tiene sentido. Tal vez esto cambie a medida que madura el sistema operativo Steam (una plataforma centrada en juegos y basada en Linux), aunque hay que admitir que el sistema operativo Steam no trae mucho a la mesa fuera de lo que otros sistemas operativos traen, por ahora.


Mermelada ofrece un excelente marco de extensión nativa

http://www.madewithmarmalade.com/marmalade/features/extensions-development-kit

Lo que en última instancia significa que puede saltar directamente a una implementación nativa de cualquier característica particular. Aún conserva los beneficios principales del desarrollo multiplataforma para su aplicación principal.

También en android porque mermelada utiliza el NDK de Android, su código c ++ para procesar datos se ejecutará más rápido que el código Java de Android correspondiente.

Estoy haciendo juegos con Marmalade y las extensiones y la velocidad del código nativo me hacen extremadamente seguro de poder entregar al menos tan bien como una aplicación "nativa".


Por lo que puedo decir de ANDROID Desarrollo: la API de la cámara de Android parece tener un pequeño buggy (por ejemplo, antes de la versión 2.1 no hay solución para que la cámara se muestre en modo retrato sin mezclar las imágenes). Otra capa de abstracción encima de eso podría ser mejor (en términos de accesibilidad, características, lo que sea), o incluso peor. Lo que hace para shure: Roba recursos, que pueden ser necesarios para su propia aplicación.


Soy parcial, siendo el CTO en Marmalade ... pero si sus requisitos clave son (1) acceso a la cámara y (2) la capacidad de "exprimir cada poquito de potencia de procesamiento disponible", Marmalade es una excelente opción.

Marmalade compila sus instrucciones C / C ++ a ARM nativas (o x86) ... sin transcodificación ni máquinas virtuales. Es muy fácil transmitir el código C / C ++ existente, se admiten casi todas las bibliotecas estándar de C / C ++, etc. Y puede usar el código ASM dentro de su proyecto. Además, puede realizar todo su desarrollo en Windows o Mac, independientemente de las plataformas en las que se implemente (sí, incluso puede compilar / probar / implementar en iOS únicamente en Windws).


Yo usaría MoSync Android / iOS, pero diría eso, ya que trabajo en MoSync.

Pero para ser justos, prefiero la API MoSync Camera.

Si realmente desea exprimir todo el poder de procesamiento, debe usar ASM.

/ Tony