Android NDK y optimizacion para x86
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Android NDK y optimizacion para x86

on

  • 113 views

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

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

Statistics

Views

Total Views
113
Views on SlideShare
113
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Android NDK y optimizacion para x86 Presentation Transcript

  • 1. Android NDK y optimización para x86 Pedro Galván - @pedrogk Mobilecamp MX, agosto 2014 #IntelAndroid #MobileCampMx http://slideshare.net/RevistaSG
  • 2. Aclaraciones • Sobre mí. • Sobre enfoque de la plática. • Sobre Intel. #IntelAndroid 2
  • 3. Repaso #IntelAndroid 3
  • 4. Reality check: Android funciona sobre distintas arquitecturas de procesador • ARM (armeabi, armeabi-v7a) – Qualcomm, Apple, Nvidia • x86 – Intel • MIPS #IntelAndroid 4
  • 5. Android software stack Crédito: https://thenewcircle.com/s/post/1044/remixing_android #IntelAndroid 5
  • 6. Estrategias para crear Android apps • Clásica • Astuta • Merol #IntelAndroid 6
  • 7. Clásica Java, Android application framework #IntelAndroid 7
  • 8. Frameworks cross-platform jQuery Mobile, PhoneGap (Cordova), Titanium, Xamarin, Sencha, Kendo, RubyMotion (v3), etc. #IntelAndroid 8
  • 9. NDK (Native Development Kit) Programar librerías (en C/C++) que compilas para el tipo específico de procesador. #IntelAndroid 9
  • 10. NDK #IntelAndroid 10
  • 11. ¿Natividad? #IntelAndroid 11
  • 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
  • 14. NDK: Panorama del proceso Crédito: Sebastian Mauer #IntelAndroid 14
  • 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
  • 18. Android en X86 (#IntelAndroid) #IntelAndroid 18
  • 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
  • 25. Herramientas de Intel #IntelAndroid 25
  • 26. Zona de desarrolladores Intel https://software.intel.com/es-es/android #IntelAndroid 26
  • 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. Appthwack: Testing en la nube http://appthwack.com #IntelAndroid 28
  • 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
  • 32. ¡RIFA! #IntelAndroid 32
  • 33. Gana una Asus MemoPad 7 http://sg.com.mx/rifaintelandroid #IntelAndroid 33
  • 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