Upload
software-guru
View
165
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Presentación sobre optimización de Android NDK para x86 impartida en MobileCampMx por Pedro Galvan
Citation preview
Android NDK y optimización
para x86
Pedro Galván - @pedrogk
Mobilecamp MX, agosto 2014
#IntelAndroid #MobileCampMx
http://slideshare.net/RevistaSG
Aclaraciones
• Sobre mí.
• Sobre enfoque de la plática.
• Sobre Intel.
#IntelAndroid 2
Repaso
#IntelAndroid 3
Reality check: Android funciona sobre
distintas arquitecturas de procesador
• ARM (armeabi, armeabi-v7a)
– Qualcomm, Apple, Nvidia
• x86
– Intel
• MIPS
#IntelAndroid 4
Android software stack
Crédito: https://thenewcircle.com/s/post/1044/remixing_android
#IntelAndroid 5
Estrategias para crear Android apps
• Clásica
• Astuta
• Merol
#IntelAndroid 6
Clásica
Java, Android application framework
#IntelAndroid 7
Frameworks cross-platform
jQuery Mobile, PhoneGap (Cordova), Titanium, Xamarin, Sencha, Kendo, RubyMotion (v3), etc.
#IntelAndroid 8
NDK (Native Development Kit)
Programar librerías (en C/C++) que compilas para el tipo específico de procesador.
#IntelAndroid 9
NDK
#IntelAndroid 10
¿Natividad?
#IntelAndroid 11
¿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
¿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
NDK: Panorama del proceso
Crédito: Sebastian Mauer
#IntelAndroid 14
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
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
NDK: Inconvenientes
• Mayor complejidad.
• Dificultad para depurar.
• Las mejoras de desempeño no son
garantizadas (hay overhead).
#IntelAndroid 17
Android en X86
(#IntelAndroid)
#IntelAndroid 18
Situación actual
Intel todavía tiene poco market share pero se está preparando para cambiar esto (2015).
#IntelAndroid 19
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.”
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
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
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
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
Herramientas de Intel
#IntelAndroid 25
Zona de desarrolladores Intel
https://software.intel.com/es-es/android
#IntelAndroid 26
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
Appthwack: Testing en la nube
http://appthwack.com
#IntelAndroid 28
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
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
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
¡RIFA!
#IntelAndroid 32
Gana una Asus MemoPad 7
http://sg.com.mx/rifaintelandroid
#IntelAndroid 33
Más info
• http://giraintelandroid.com
– DF, Gdl, Mty y Bogotá
• http://sg.com.mx/buzz/tutorial-como-
ejecutar-codigo-c-android-el-ndk
• https://software.intel.com/en-
us/articles/optimizaci-n-de-aplicaciones-
android-para-arquitectura-x86
#IntelAndroid 34