2012-02-20 17 views
12

Veo un proyecto integrado que necesita una pantalla multitáctil LCD, un controlador LCD, un navegador webkit, Avahi, un servidor web y nuestro motor escrito en C++.Android vs Linux para la aplicación de pantalla táctil incrustada

Android a primera vista parece que tiene la mayoría de los componentes correctos fuera de la caja con la menor modificación ... Pero el uso de una JVM parece ser pesado para un pequeño dispositivo incrustado en la memoria (128-196MB min) y además nuestro código es C++. Parece que no se puede extraer la JVM porque los principales componentes del sistema operativo se están ejecutando en Java (¿verdad?).

Linux parece tener la mayoría de las piezas que se pueden unir, sin el innecesario cruft. Estas son las principales preguntas:

  • vez que las piezas se ponen juntas GUI, Linux es todavía una huella de memoria significativamente más pequeños que los de Android asumiendo los componentes de JVM y aplicación en Android no son útiles para el proyecto (en este momento nuestra La construcción de Linux sin GUI es de alrededor de 24MB)?
  • ¿Se puede ejecutar Android sin los componentes de JVM para reducir el espacio de memoria si no necesita ninguna aplicación de usuario que se ejecute en Java?
  • ¿Puedes escribir aplicaciones C++ de primera clase en Android?
  • ¿Tiene linux una interfaz multitáctil madura con teclado táctil en todo el sistema, GUI táctil, gestos broswer tocables (desplazamiento, zoom, etc.). ¿O requiere mucha codificación de UI personalizada?
+0

Esta no es una respuesta a su pregunta: pero ¿alguna vez ha mirado a buildroot? http://buildroot.uclibc.org/ Lo he usado como base para la mayoría de mis plataformas integradas y su lista de paquetes es bastante grande. Sin embargo, nunca he diseñado un sistema con una GUI. Tal vez un vistazo a lo que ofrece le dará una idea de lo que tendría que crear a mano con una solución que no sea de Android. FWIW – tMC

+0

android es un sistema operativo basado en Linux http://en.wikipedia.org/wiki/Android_%28operating_system%29 –

+0

@Ray, que no responde a ninguna de sus preguntas. Pon énfasis en "Una vez que las piezas de GUI se juntan". Él quiere una comparación de Android con Linux + Z, y él no sabe qué es Z, o si existe. –

Respuesta

1

No estoy hablando de la experiencia, pero echa un vistazo a http://www.omgubuntu.co.uk/2012/02/kde-spark-tablet-opens-pre-order-registration/ o incluso más fácil en https://www.google.com/search?q=ubuntu+touch+interface

Así que sí, Linux tiene soporte para el tacto. No estoy seguro acerca de multitáctil, por lo que sé, está ahí (pero tengo 0 experiencia).

En cuanto a desplazamiento y zoom, supongo que todo dependerá de lo que use en la parte posterior. La verdadera pregunta debería ser si webkit admite el desplazamiento suave y el zoom (si planeas ejecutar tu aplicación en un navegador, según entiendo).

3

Hay una cantidad de conceptos erróneos en su publicación. Voy a empezar por la numeración de preguntas y respuestas:

  • vez que las piezas se ponen juntas GUI, es Linux sigue siendo una huella de memoria significativamente más pequeños que los de Android asumiendo los componentes de JVM y aplicación en Android no son útiles para el proyecto (en este momento nuestra construcción de Linux sin GUI es de alrededor de 24MB)?

Todo depende de qué gestor de ventanas elijas utilizar. Mi instinto aquí es cualquier cosa con soporte táctil maduro cercano en este punto va a ser tan pesado o más pesado que Android.

  • ¿Se puede ejecutar Android sin los componentes JVM para reducir el espacio de memoria si no necesita ninguna aplicación de usuario que se ejecute en Java?

Android no utiliza JVM. Android usa el lenguaje Java, pero usa la máquina virtual dalvik diseñada para dispositivos integrados. Lo común termina con el hecho de que son máquinas virtuales.

  • ¿Puedes escribir aplicaciones C++ de primera clase en Android?

Puede escribir grandes porciones de su aplicación en C o C++ utilizando el NDK, sin embargo, cualquier módulo escrito de esa manera debe ser llamado a través de un android escrito usando el java/dalvik SDK. De esta forma, cualquier módulo de rendimiento crítico, como hacer cálculos extensos, puede ser nativo, pero la capa de interfaz gráfica no lo será (aunque generalmente es menos probable que se trate de un rendimiento de la capa de GUI). Las bibliotecas nativas de ventanas y UI de Windows están escritas en Java, tendrías que rehacer mucho del trabajo para obtener elementos de UI utilizables en el NDK, ya que Google no tenía la intención de utilizar el NDK para eso.

Mi consejo aquí es para crear prototipos de la aplicación con el SDK normal, dejar talones para cualquier cosa que se beneficiarían de la aceleración de hardware (Que sea modular, por lo que no es demasiado interdependientes)

  • ¿Se Linux tienen una interfaz multitáctil madura con teclado táctil en todo el sistema, toque la GUI, gestos de broswer tocables (desplazamiento, zoom, etc.). ¿O requiere mucha codificación de UI personalizada?

Depende del gestor de ventanas que utilice. No importa lo que elija, es probable que necesite perder el tiempo hasta que encuentre combinaciones viables de todo. No hay una gran solución de distribución integrada que conozca (aunque otros pueden). Mi impresión de la configuración de la tierra es que no se ha hecho mucho en este frente.

Lo último que deseo agregar es que el código Java bien escrito que se ejecuta en Dalvik (o incluso JVM) puede correr cerca de la velocidad del código nativo. Si sabes lo que estás haciendo y entiendes cuando algo es una referencia, qué tipos de colección usar para qué propósito (pista: no todo es una matriz), y no están replicando objetos por todas partes, Java es bastante bueno.

+0

Dalvik es solo una implementación de JVM. Todavía es una máquina virtual basada en Java. Un punto de referencia típico para Java vs C muestra una reducción de 2-3 veces en el rendimiento a un aumento de 3 veces (o más) en el uso de la memoria RAM. Esto no es sorprendente, ya que es una máquina virtual y utiliza la recolección automática de basura. Incluso si no fuera una VM, la recolección de basura lo condena a un compromiso entre RAM y velocidad. De todos modos, perder 3x de rendimiento con 3x de RAM es una costosa compensación para un dispositivo integrado –

+0

Dalvik no es una implementación de JVM en absoluto. El código de bytes es completamente diferente. Al crear una aplicación para Android, la aplicación se compila primero en código de bytes Java, luego en código de bytes Dalvik. Los dos no son compatibles, ya que eso es lo que implicaría ser una implementación de JVM. – hsanders

+0

código de bytes = una máquina virtual.No estoy seguro de por qué esto no está claro –

Cuestiones relacionadas