12. ¿Qué es una app NDK?
• Una aplicación que utiliza librerías nativas.
• Las librerías son archivos .so que típicamente
están en libs/CPU_ABI/
• Las librerías son generadas a partir de código
fuente, o por motores (ej. juegos).
• No existen aplicaciones 100% nativas. Solo
algunas partes de la app se implementan
como librerías nativas.
#IntelAndroid 12
13. ¿Para qué NDK?
• Programar componentes intensivos en
procesamiento (multimedia, algoritmos
complejos, juegos).
• Acceso directo a hardware e instrucciones
específicas del procesador (ej. NEON, SSE3).
• Reutilizar código legado.
#IntelAndroid 13
15. Compatibilidad con C/C++ estándar
• Bionic C no soporta todo lo que glibc
– Soporte limitado para pthreads
– No hay manejo de excepciones de C++
– No es POSIX compliant
#IntelAndroid 15
16. NDK: Compilar para varias plataformas
• Descargar Android NDK
• Compilar con ndk-build
• Utilizar opción APP_ABI para indicar
arquitectura deseada.
$ndk-build APP_ABI=armeabi-v7a
• Otros valores para APP_ABI: x86, mips, all
• También lo puedes definir en
jni/Application.mk
#IntelAndroid 16
17. NDK: Inconvenientes
• Mayor complejidad.
• Dificultad para depurar.
• Las mejoras de desempeño no son
garantizadas (hay overhead).
#IntelAndroid 17
19. Situación actual
Intel todavía tiene poco market share pero se está preparando para cambiar esto (2015).
#IntelAndroid 19
20. Binarios de ARM en x86
• La mayoría de las apps NDK están compiladas
para arquitectura ARM.
• Los dispositivos Intel pueden ejecutar estas
apps por medio de traducción en tiempo real,
pero afecta desempeño.
#IntelAndroid 20
“Traducir en tiempo real
tiene su chiste.”
21. Estrategias: Dalvik apps
a) Dejar igual
– Funcionará sin problemas porque no tiene
binarios específicos al procesador.
b) Considerar implementar partes en NDK
– Elegir partes que se puedan beneficiar más de
implementación a bajo nivel (ej: procesamiento
avanzado de gráficos).
#IntelAndroid 21
22. Estrategias: NDK apps
• Acceso a código fuente
– Recompilar con APP_API=x86
– Si hay instrucciones específicas a ARM, generar
versión de código para x86.
• Sin acceso a código
– Migrar (reimplementar o cambiar de motor)
– Dejar así (no recomendado por bajo desempeño)
#IntelAndroid 22
23. Estrategias: Motores y frameworks
• Amigables con x86
– Appcelerator, Cordova, Adobe AIR, libgdx,
Cocos2d, Unreal 3D, Project Anarchy.
• No amigables (hasta ahora)
– Unity, Corona
#IntelAndroid 23
24. Optimización al compilar
1. Ajustar niveles (flags) de compilación
(ej. LOCAL_CFLAGS += -O1)
– O0: default,reduce tiempo de compilación
– O1: reduce tamaño de código
– O2: más lento en compilar pero mejor desempeño
– O3: como O2 pero con más opciones
• Utilizar compiladores específicos
– Intel C++ compiler for Android (mejora ~30%)
#IntelAndroid 24
27. Hardware Accelerated Execution Manager (HAXM)
Aceleración por GPU para el emulador. Requieres instalar una imagen de x86 en Android SDK y habilitar VT en
tu BIOS
#IntelAndroid 27
29. Intel Graphics Performance Analyzer
• Análisis de desempeño en tiempo real
• Métricas de CPU, GPU, memoria, energía, etc.
• Componentes para juegos: frame analyzer &
debugger (OpenGL).
#IntelAndroid 29
30. Intel Native Development Experience
(INDE)
• Suite para desarrollo nativo (NDK) multi-
plataforma (ARM y x86).
• Fácil acceso a herramientas para desarrollo de
aplicaciones NDK.
#IntelAndroid 30
31. Intel XDK
• HTML5 app development
• Soporta APIs de Apache Cordova
• Crosswalk web runtime
– Aplicaciones híbridas con alto desempeño
• Testing & Debugging
• http://xdk-software.intel.com
#IntelAndroid 31