SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
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

La actualidad más candente

Artículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSEArtículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSEtorrubia
 
Arquitectura y diseño de un entorno de desarrollo - decharlas
Arquitectura y diseño de un entorno de desarrollo - decharlasArquitectura y diseño de un entorno de desarrollo - decharlas
Arquitectura y diseño de un entorno de desarrollo - decharlasDecharlas
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 
Drupal grunt task - Drupal Camp CR 2015
Drupal grunt task  - Drupal Camp CR 2015Drupal grunt task  - Drupal Camp CR 2015
Drupal grunt task - Drupal Camp CR 2015Daniel Noyola
 
Aprendiendo Java SCF
Aprendiendo Java SCFAprendiendo Java SCF
Aprendiendo Java SCFmikaelsorai
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Micael Gallego
 
Arquitectura Android
Arquitectura AndroidArquitectura Android
Arquitectura Androidadvillacorta
 
Arquitectura de Android por Andrés Deza
Arquitectura de Android por Andrés DezaArquitectura de Android por Andrés Deza
Arquitectura de Android por Andrés DezaLima GTUG
 
Desarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaDesarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaSantiago Sora
 

La actualidad más candente (14)

Artículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSEArtículo 1 sobre la plataforma ECLIPSE
Artículo 1 sobre la plataforma ECLIPSE
 
Arquitectura y diseño de un entorno de desarrollo - decharlas
Arquitectura y diseño de un entorno de desarrollo - decharlasArquitectura y diseño de un entorno de desarrollo - decharlas
Arquitectura y diseño de un entorno de desarrollo - decharlas
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
Drupal grunt task - Drupal Camp CR 2015
Drupal grunt task  - Drupal Camp CR 2015Drupal grunt task  - Drupal Camp CR 2015
Drupal grunt task - Drupal Camp CR 2015
 
Clase ii
Clase iiClase ii
Clase ii
 
Slickedit grupo#3
Slickedit grupo#3Slickedit grupo#3
Slickedit grupo#3
 
Aprendiendo Java SCF
Aprendiendo Java SCFAprendiendo Java SCF
Aprendiendo Java SCF
 
Hack x crack_java
Hack x crack_javaHack x crack_java
Hack x crack_java
 
Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020Curso Angular 9 - CodeURJC - Marzo 2020
Curso Angular 9 - CodeURJC - Marzo 2020
 
Arquitectura Android
Arquitectura AndroidArquitectura Android
Arquitectura Android
 
Arquitectura de Android por Andrés Deza
Arquitectura de Android por Andrés DezaArquitectura de Android por Andrés Deza
Arquitectura de Android por Andrés Deza
 
Desarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.javaDesarrollo.de.aplicaciones.con.java
Desarrollo.de.aplicaciones.con.java
 
Ut
UtUt
Ut
 
Instituto Cristiano Encuentro
Instituto Cristiano EncuentroInstituto Cristiano Encuentro
Instituto Cristiano Encuentro
 

Destacado

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

Destacado (10)

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

Similar a Android NDK y optimizacion para x86

Plataformas Android de Intel
Plataformas Android de Intel Plataformas Android de Intel
Plataformas Android de Intel videos
 
Herramientas de Intel en Android Day
Herramientas de Intel en Android DayHerramientas de Intel en Android Day
Herramientas de Intel en Android Dayvideos
 
Lleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelLleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelSoftware Guru
 
Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumvideos
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDKFe
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndkBarcelona GTUG
 
Herramientas de desarrollo para dispositivos móviles
Herramientas de desarrollo para dispositivos móvilesHerramientas de desarrollo para dispositivos móviles
Herramientas de desarrollo para dispositivos móvilesFernand Bernowly
 
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)Igalia
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0Luis Ruiz Pavón
 
Fundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidFundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidSantiago Márquez Solís
 
Consideraciones al escoger apps híbridas vs nativas
Consideraciones al escoger apps híbridas vs nativasConsideraciones al escoger apps híbridas vs nativas
Consideraciones al escoger apps híbridas vs nativasSoftware Guru
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIgalia
 

Similar a Android NDK y optimizacion para x86 (20)

Plataformas Android de Intel
Plataformas Android de Intel Plataformas Android de Intel
Plataformas Android de Intel
 
Herramientas de Intel en Android Day
Herramientas de Intel en Android DayHerramientas de Intel en Android Day
Herramientas de Intel en Android Day
 
Introducción a ndk
Introducción a ndkIntroducción a ndk
Introducción a ndk
 
01 - Introducción al lenguaje C
01 - Introducción al lenguaje C01 - Introducción al lenguaje C
01 - Introducción al lenguaje C
 
Lleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente NivelLleva tu Android App al Sigiente Nivel
Lleva tu Android App al Sigiente Nivel
 
Seminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforumSeminario Android (Parte 1) - movilforum
Seminario Android (Parte 1) - movilforum
 
Andrid studio
Andrid studioAndrid studio
Andrid studio
 
Sistema operativo android
Sistema operativo androidSistema operativo android
Sistema operativo android
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndk
 
Android
AndroidAndroid
Android
 
Herramientas de desarrollo para dispositivos móviles
Herramientas de desarrollo para dispositivos móvilesHerramientas de desarrollo para dispositivos móviles
Herramientas de desarrollo para dispositivos móviles
 
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
Gráficos 3D en Linux con Mesa (GPUL Labs Meetup)
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
Fundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidFundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para Android
 
ANDROID STUDIO
ANDROID STUDIOANDROID STUDIO
ANDROID STUDIO
 
ANDROID
ANDROID ANDROID
ANDROID
 
Consideraciones al escoger apps híbridas vs nativas
Consideraciones al escoger apps híbridas vs nativasConsideraciones al escoger apps híbridas vs nativas
Consideraciones al escoger apps híbridas vs nativas
 
Android
AndroidAndroid
Android
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
 

Más de Software Guru

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

Más de Software Guru (20)

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

Último

presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 

Último (15)

presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 

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