Android NDK y optimización
para x86
Pedro Galván - @pedrogk
Mobilecamp MX, agosto 2014
#IntelAndroid #MobileCampMx
http://...
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...
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.
#Inte...
NDK (Native Development Kit)
Programar librerías (en C/C++) que compilas para el tipo específico de procesador.
#IntelAndr...
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á...
¿Para qué NDK?
• Programar componentes intensivos en
procesamiento (multimedia, algoritmos
complejos, juegos).
• Acceso di...
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...
NDK: Compilar para varias plataformas
• Descargar Android NDK
• Compilar con ndk-build
• Utilizar opción APP_ABI para indi...
NDK: Inconvenientes
• Mayor complejidad.
• Dificultad para depurar.
• Las mejoras de desempeño no son
garantizadas (hay ov...
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 puede...
Estrategias: Dalvik apps
a) Dejar igual
– Funcionará sin problemas porque no tiene
binarios específicos al procesador.
b) ...
Estrategias: NDK apps
• Acceso a código fuente
– Recompilar con APP_API=x86
– Si hay instrucciones específicas a ARM, gene...
Estrategias: Motores y frameworks
• Amigables con x86
– Appcelerator, Cordova, Adobe AIR, libgdx,
Cocos2d, Unreal 3D, Proj...
Optimización al compilar
1. Ajustar niveles (flags) de compilación
(ej. LOCAL_CFLAGS += -O1)
– O0: default,reduce tiempo d...
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 e...
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.
...
Intel Native Development Experience
(INDE)
• Suite para desarrollo nativo (NDK) multi-
plataforma (ARM y x86).
• Fácil acc...
Intel XDK
• HTML5 app development
• Soporta APIs de Apache Cordova
• Crosswalk web runtime
– Aplicaciones híbridas con alt...
¡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-an...
Upcoming SlideShare
Loading in...5
×

Android NDK y optimizacion para x86

167

Published on

Presentación sobre optimización de Android NDK para x86 impartida en MobileCampMx por Pedro Galvan

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
167
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Android NDK y optimizacion para x86"

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

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×