2010-12-20 8 views
7

Quiero portar una aplicación escrita en C++ a Android. La conversión de la aplicación de C++ a Java requerirá mucho trabajo que preferiría utilizar para mejorar la aplicación de esa plataforma en lugar de corregir errores de conversión y resolver problemas de refactorización.¿Existe realmente Android en otras plataformas aparte de ARM?

El NDK parece un buen camino a seguir, pero en realidad no quiero perderme una plataforma (si es un considerable% del mercado) solo porque el NDK no la soporta o no la admite.

Android afirma que es compatible con MIPS, ARM, X86 y otros ... pero en realidad todas las implementaciones que he visto están solo en ARM (o compatibles con el brazo). Lo comprobé en este sitio: http://www.pdadb.net/

¿Sería una mala decisión usar el NDK?
¿Hay dispositivos que no sean ARM que ejecuten o ejecutarán Android?
¿Dónde puedo encontrar más información sobre esto?

¡Gracias de antemano!

+3

así, debería ser sólo una cuestión de la compilación en un arco diferente si y cuando alguien realmente ejecuta Android en un arco diferente. A menos que estés usando un asm en línea o algo así. – ewanm89

+0

¿Terminaste tu juego? Me encantaría jugarlo. –

+0

también por favor comparta la solución que usted adaptó –

Respuesta

5

En este punto, el problema no es que no se perdería cuota de mercado debido a la arquitectura de la CPU, ya que hay muy pocos dispositivos Android no ARM en este momento, el problema es que puede perder participación de mercado debido a que los usuarios deben ejecutar Android 2.3 o posterior, que tendrían que usar para crear una aplicación completamente nativa con acceso a la ventana, el sensor y los subsistemas de entrada.

Evitar el código de reescritura es un buen objetivo, pero es probable que tenga que volver a escribir partes del código de todos modos debido a las diferentes API de Windows y ciclo de vida de Android. Ahora tendría que volver a escribir algunas partes importantes del código en C++ en lugar de hacerlo en Java.

Puede probar un enfoque híbrido en el que escribe la mayor parte de la IU en Java y luego realiza llamadas a su código C++ existente.

¿Estás haciendo un juego? Entonces, probablemente querrá lidiar con estos problemas y continuar con el NDK. De lo contrario, intente implementar la mayor cantidad de programa posible en Java y use el NDK para las partes complejas y probadas de su código que deben ser rápidas.

+0

¡Sí!Es un juego. Olvidé decir eso: P Básicamente voy a hacer las llamadas a OpenGLES/Sound y al sistema en Java. Pero no quiero tocar el código C++ porque requerirá mucho trabajo solo para convertirlo. Mi plan es trabajar con Android 2.1 que parece que será más del 95% en un par de meses (probablemente estaré bien soportando 1.6 también) Mi temor es tener que volver a hacer el juego en java en 6 meses ... ¿Cómo puedo estar seguro de que estaré bien? – user548569

+0

Tristemente, no puedo decir con certeza que estarás bien, pero estoy bastante seguro de que no te volverás a encontrar reescribiéndolo todo en Java. Además, como se dice en la documentación de NDK, "También puede compilar para ambas arquitecturas [ARM] al mismo tiempo y tener todo almacenado en el archivo .apk final". Entonces estarías listo para el futuro previsible. ¡Buena suerte! – Nate

3

El documentation dicta la siguiente:

The latest release of the NDK supports these ARM instruction sets: 

ARMv5TE (including Thumb-1 instructions) 
ARMv7-A (including Thumb-2 and VFPv3-D16 instructions, with optional support for  NEON/VFPv3-D32 instructions) 

Future releases of the NDK will also support: 

x86 instructions (see CPU-ARCH-ABIS.HTML for more information) 
2

¿Sería una mala idea usar el NDK?

Para los algoritmos, el NDK está bien. Para los juegos, el NDK está bien. Para implementar una aplicación común, el NDK no será de gran ayuda.

¿Hay dispositivos que no sean ARM que ejecuten o ejecutarán Android?

Google TV se ejecuta en x86 (Atom).

+0

¡Creo que tienes tus sí y no al revés! – richq

+0

@richq: Um, sí, eso estuvo bastante mal. Aclaré la respuesta. ¡Gracias por mencionarlo! – CommonsWare

Cuestiones relacionadas