SlideShare una empresa de Scribd logo
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

Más contenido relacionado

PDF
Desarrollo de aplicaciones realmente nativas con NDK
PDF
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
PPTX
Librerías nativas
PDF
Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama
PDF
Intel Android @ HackMTY
PDF
FPJUCE - Capitulo1
PPTX
SlickEdit, Historia, Características más relevantes
Desarrollo de aplicaciones realmente nativas con NDK
Gráficos cada vez más rápidos. Cómo usar NDK y RenderScript
Librerías nativas
Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama
Intel Android @ HackMTY
FPJUCE - Capitulo1
SlickEdit, Historia, Características más relevantes

La actualidad más candente (14)

PDF
Artículo 1 sobre la plataforma ECLIPSE
PDF
Arquitectura y diseño de un entorno de desarrollo - decharlas
PDF
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
PDF
Drupal grunt task - Drupal Camp CR 2015
PPTX
Slickedit grupo#3
DOCX
Aprendiendo Java SCF
PDF
Hack x crack_java
PDF
Curso Angular 9 - CodeURJC - Marzo 2020
PPT
Arquitectura Android
PPT
Arquitectura de Android por Andrés Deza
PDF
Desarrollo.de.aplicaciones.con.java
DOCX
PPSX
Instituto Cristiano Encuentro
Artículo 1 sobre la plataforma ECLIPSE
Arquitectura y diseño de un entorno de desarrollo - decharlas
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Drupal grunt task - Drupal Camp CR 2015
Slickedit grupo#3
Aprendiendo Java SCF
Hack x crack_java
Curso Angular 9 - CodeURJC - Marzo 2020
Arquitectura Android
Arquitectura de Android por Andrés Deza
Desarrollo.de.aplicaciones.con.java
Instituto Cristiano Encuentro
Publicidad

Destacado (10)

PDF
Optimización de Aplicaciones Android para X86
PDF
Theres never been a better time
PDF
La evolución del Project Manager en la era ágil
PDF
Un futuro distribuido con blockchain
PDF
Somos pocas pero picosas (Mujeres en TI)
PDF
Ecommerce en México: Recuento 2016.
PPTX
PDF
IoT, Creando mejores experiencias para los clientes
PDF
Taxonomía de un próyecto Web 2 base DevSecOps
PDF
IoT, Creando mejores experiencias para los clientes
Optimización de Aplicaciones Android para X86
Theres never been a better time
La evolución del Project Manager en la era ágil
Un futuro distribuido con blockchain
Somos pocas pero picosas (Mujeres en TI)
Ecommerce en México: Recuento 2016.
IoT, Creando mejores experiencias para los clientes
Taxonomía de un próyecto Web 2 base DevSecOps
IoT, Creando mejores experiencias para los clientes
Publicidad

Similar a Android NDK y optimizacion para x86 (20)

PDF
Plataformas Android de Intel
PDF
Lleva tu Android App al Sigiente Nivel
PDF
Seminario Android (Parte 1) - movilforum
DOCX
Android de la A a la Z - Unidad 1
PPTX
Taller deandroid
PDF
"Android de la A a la Z" -- Unidad 1
PDF
Taller de prog. en android
PPT
Taller de Android
PDF
Unidad 2 Primeros pasos con android
PPTX
PDF
Herramientas de Intel en Android Day
PPTX
Introducción a android
PPTX
PDF
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK
PPTX
Arquitectura 63583.pptx
PPTX
Terminado,sistmas operativos
PPTX
Exposición - Android
PPTX
Androidoriiginal
PPT
Curso Introducción a android
Plataformas Android de Intel
Lleva tu Android App al Sigiente Nivel
Seminario Android (Parte 1) - movilforum
Android de la A a la Z - Unidad 1
Taller deandroid
"Android de la A a la Z" -- Unidad 1
Taller de prog. en android
Taller de Android
Unidad 2 Primeros pasos con android
Herramientas de Intel en Android Day
Introducción a android
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK
Arquitectura 63583.pptx
Terminado,sistmas operativos
Exposición - Android
Androidoriiginal
Curso Introducción a android

Más de Software Guru (20)

PDF
Hola Mundo del Internet de las Cosas
PDF
Estructuras de datos avanzadas: Casos de uso reales
PPTX
Building bias-aware environments
PDF
El secreto para ser un desarrollador Senior
PDF
Cómo encontrar el trabajo remoto ideal
PDF
Automatizando ideas con Apache Airflow
PPTX
How thick data can improve big data analysis for business:
PDF
Introducción al machine learning
PDF
Democratizando el uso de CoDi
PDF
Gestionando la felicidad de los equipos con Management 3.0
PDF
Taller: Creación de Componentes Web re-usables con StencilJS
PPTX
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
PDF
¿Qué significa ser un programador en Bitso?
PDF
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
PDF
Pruebas de integración con Docker en Azure DevOps
PDF
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
PDF
Así publicamos las apps de Spotify sin stress
PPTX
Achieving Your Goals: 5 Tips to successfully achieve your goals
PDF
Acciones de comunidades tech en tiempos del Covid19
PDF
De lo operativo a lo estratégico: un modelo de management de diseño
Hola Mundo del Internet de las Cosas
Estructuras de datos avanzadas: Casos de uso reales
Building bias-aware environments
El secreto para ser un desarrollador Senior
Cómo encontrar el trabajo remoto ideal
Automatizando ideas con Apache Airflow
How thick data can improve big data analysis for business:
Introducción al machine learning
Democratizando el uso de CoDi
Gestionando la felicidad de los equipos con Management 3.0
Taller: Creación de Componentes Web re-usables con StencilJS
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
¿Qué significa ser un programador en Bitso?
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Pruebas de integración con Docker en Azure DevOps
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Así publicamos las apps de Spotify sin stress
Achieving Your Goals: 5 Tips to successfully achieve your goals
Acciones de comunidades tech en tiempos del Covid19
De lo operativo a lo estratégico: un modelo de management de diseño

Último (20)

PDF
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PPTX
Propuesta BKP servidores con Acronis1.pptx
DOCX
Contenido Fundamentos de comunicaciones Fibra Optica (1).docx
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PDF
Maste clas de estructura metálica y arquitectura
PPTX
Curso de generación de energía mediante sistemas solares
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PPTX
El uso de las TIC en la vida cotidiana..
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
modulo seguimiento 1 para iniciantes del
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
clase auditoria informatica 2025.........
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
MANUAL de recursos humanos para ODOO.pdf
Ronmy José Cañas Zambrano - Potenciando la tecnología en Venezuela.pdf
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
la-historia-de-la-medicina Edna Silva.pptx
Propuesta BKP servidores con Acronis1.pptx
Contenido Fundamentos de comunicaciones Fibra Optica (1).docx
Estrategia de Apoyo de Daylin Castaño (5).pdf
Maste clas de estructura metálica y arquitectura
Curso de generación de energía mediante sistemas solares
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Historia Inteligencia Artificial Ana Romero.pptx
El uso de las TIC en la vida cotidiana..
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
modulo seguimiento 1 para iniciantes del
Presentacion de Alba Curso Auditores Internos ISO 19011
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Documental Beyond the Code (Dossier Presentación - 2.0)
historia_web de la creacion de un navegador_presentacion.pptx
clase auditoria informatica 2025.........
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
MANUAL de recursos humanos para ODOO.pdf

Android NDK y optimizacion para x86

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