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.
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
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