2010-11-07 11 views
7

Necesito que algunas operaciones que deben realizarse en largas [] s grandes sean muy rápidas. La única opción que puedo ver es usar el Android NDK. ¿Puede alguien dar un resumen sobre el uso de NDK para mi aplicación en términos de qué dispositivos pueden usar la aplicación y cuáles son las implicaciones para mantener mi aplicación?¿Cuáles son las implicaciones de portabilidad del uso del NDK?

Vi que necesita especificar para qué arquitectura desea compilar su código C, como ARM e Intel. ¿Qué sucede cuando aparecen nuevas arquitecturas para Android? ¿Tendré que actualizar mi aplicación cada vez que aparezca una nueva arquitectura?

+0

Sí, necesitarás un ejecutable para cada una de las arquitecturas.Probablemente puedas simplemente incluirlos a todos y cargar los que necesites, pero nunca he usado el NDK. ¿Qué estás haciendo exactamente en los largos? ¿Estás SEGURO de que eso es un cuello de botella en tu código? ¿Lo has implementado y perfilado? – Falmarri

+0

La operación larga implica enmascarar los primeros 8 bits, realizar algunas adiciones y multiplicaciones, volver a colocar los bits y luego hacer esto para los bits restantes. Es muy lento en Java (por ejemplo, 1s para ejecutar cuando quiero aproximadamente 0.1s) y parece el candidato ideal para NDK. Sin embargo, el código es simple y funcionará en todos los archs. – RichardNewton

Respuesta

7

Puede alguien dar un resumen de lo que el uso de la NDK hace a mi aplicación en términos de qué dispositivos pueden utilizar la aplicación

Sólo los dispositivos que se ejecutan en una CPU para los que tiene un NDK .so serán capaz de ejecutar tu aplicación

y cuáles son las implicaciones para mantener mi aplicación?

Las pruebas en arquitecturas de CPU múltiples pueden requerir hardware para cada arquitectura. Digo "puede" porque ...

¿Qué ocurre cuando aparecen nuevas arquitecturas para Android?

... realmente no tenemos idea. Además de agregar compatibilidad con ARM7, el NDK no ha cambiado sus objetivos.

En este momento, existen dos grandes plataformas que no son de ARM para Android que se me ocurre:

  • Intel Atom, siendo utilizado por dispositivos de Google TV. En el momento de escribir esto, el NDK no es compatible con esto. Sin embargo, tampoco puede enviar aplicaciones para Google TV. Por lo tanto, es posible que el NDK se actualice cuando llegue el momento de escribir aplicaciones de Google TV.
  • MIPS. En el momento de escribir esto, el NDK no es compatible con esto. No tengo idea de cuáles podrían ser los planes en esta área.

Es concebible que los emuladores parezcan emular esas CPU. Después de todo, el emulador de Android existente emula ARM5. Sin embargo, a menos y hasta que esto suceda, necesitará hardware de prueba para cada arquitectura que pretenda admitir.

¿Tendré que actualizar mi aplicación cada vez que aparezca una nueva arquitectura?

Solo si desea admitir la nueva arquitectura. Hasta que no haya una masa crítica de dispositivos que puedan acceder a su aplicación, cualquier nueva arquitectura no será terriblemente importante. La "masa crítica" podría provenir de las ventas generales de dispositivos, o podría deberse a que se llega a un acuerdo OEM para tener su aplicación incluida en el dispositivo de alguien.

El código es simple y funcionará en todos los archs.

Mire su endian-ness.

+0

Impresionante, gracias por su publicación. Por último, si alguien dice que tiene un nuevo teléfono basado en Intel Atom y mi aplicación no tiene un .so para esa CPU, ¿se ocultará mi aplicación en el mercado? – RichardNewton

+1

@RichardNewton: Eso espero. Supongo que podría crear una aplicación ARM7-only y ver si los dispositivos ARM5 la ven en Market, para probar la teoría antes de que aparezcan los dispositivos compatibles con Atom Market. Sin embargo, dado que hay pocas arquitecturas compatibles hoy en día, todo es un poco nebuloso en este momento. – CommonsWare

+0

Supongo que Google tendrá alguna estrategia para manejar todo esto. No pude encontrar ninguna estadística, pero el NDK está siendo utilizado por los desarrolladores y Google fomenta su uso por lo que no parece un riesgo hacer una aplicación que use el NDK hasta donde yo pueda ver. – RichardNewton

Cuestiones relacionadas