SlideShare una empresa de Scribd logo
‹#›
Introducción al Desarrollo de NDK apps
Aurora Rodríguez
#devday4w
‹#›
¿Quién soy y qué hago?
@condesa_sama
‹#›
Agenda
¿Qué es una aplicación nativa?
Introducción a NDK
JNI
Configuración de builds
‹#›
Repaso:
‹#›
Distintas arquitecturas de Android apps
Apps nativas
Se programa en Java.
Se invoca directamente las
librerías y componentes del
SDK de Android.
Apps HTML5 híbridas
Usa tecnologías web
(HTML5, CSS, Javascript).
No se programa directo al
SDK de Android sino hacia
un framework intermedio
(ej. Cordova).
‹#›
¿Cuándo elegir cada una?
Nativo
Mejor desempeño y experiencia de usuario.
Híbrido
Mayor portabilidad.
‹#›
Pero la cosa no queda ahí…
‹#›
Apps verdaderamente nativas 

Código nativo (C, C++, ASM) compilado como librerías
binarias que invocas desde tu app.
‹#›
Native Development Kit (NDK)
Conjunto de herramientas y build scripts que permiten
incorporar código nativo (C/C++) en aplicaciones Android.
Con NDK generas librerías binarias para cada arquitectura
de procesador.
Las librerías binarias se pueden invocar desde Java por
medio de JNI (Java Native Interface).
‹#›
¿Arquitectura de procesador?
Android es soportado en una gran variedad de dispositivos
con distintos tipos de arquitectura de procesador (ARM,
ARM v7, x86, x86_64, MIPS).
Los binarios compilados para una arquitectura de
procesador no funcionan para otra arquitectura.
Es necesario compilar binarios para cada arquitectura
que desees soportar.
¿Por qué usar NDK?
‹#›
Desarrollo con NDK
Código C/C++ Makefile ndk-build Mezclar con Java GDB debug
Java Framework
SDK APIs
JNI
Librerías nativas
Aplicación Android*
NDK APIs
Librería Bionic C
Usando JNI
Flujo de Desarrollo con NDK
Aplicación Android* NDK
Aplicación Dalvik*
Archivos
.class
Fuente Java
Compilar con
Javac
Librería nativa
Java .class
Librería nativa
Java*
Compilar con
Javac
Crear header C con
javah -jni
Archivo
Header
Código fuente C/
C++
Compilar y linkear
Código C
Librería
dinámica
Archivos de la
aplicación
Makefile
Opcional gracias a
JNI_Onload
Arquitectura de aplicación NDK
‹#›
Compatibilidad con C/C++ Standard
Librería Bionic C:
Más liviana que que la librería GNU C standard
Soporte limitado de pthread.
Acceso a las propiedades del sistema Android
Bionic no es compatible a nivel binario con C standard
Por ello hay que (re)compilar usando NDK.
‹#›
Instalación de Android NDK
Descargar desde
https://developer.android.com/ndk/downloads
Instalación incluye:
Herramientas y scripts para
compilar.
Headers y librerías.
Documentación y ejemplos
de código
Agregar manualmente código nativo
a proyecto existente
Estructura típica de
proyecto
Carpeta JNI
1. Crear carpeta JNI para
fuentes de código nativo.
2. Crear Makefile Android.mk
3. Construir librerías nativas usando el
script NDK-BUILD
NDK-BUILD creará
automáticamente las carpetas de
librerías ABI.
Agregar soporte para NDK desde
Eclipse
Consulta los ejemplos incluidos
App de muestra Tipo
hello-jni Llama a una función nativa escrita en C desde Java*.
bitmap-plasma Accede a un objeto Android* Bitmap desde C.
san-angeles Código EGL y OpenGL* ES en C.
hello-gl2 Setup EGL en Java y código OpenGL ES en C.
native-activity
Muestra OpenGL solo en C

(sin Java, usa la clase NativeActivity).
native-plasma
Muestra OpenGL solo en C

(también usa la clase NativeActivity).
…
‹#›
JNI
‹#›
Integración de código nativo con Java
En tu código Java, declara métodos nativos usando la palabra
clave “nativa”:
public native String stringFromJNI();
Proporciona la librería nativa compartida que contiene los
métodos usados por tu aplicación y que construiste con NDK
(ndk-build).
libMyLib.so
• Antes de usar la librería, debemos cargarla usando
System.loadLibrary
La función C que será mapeada:
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
...
{
...
tv.setText( stringFromJNI() );
...
}
public native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
Integración de código nativo con Java
‹#›
Configuración de build
Makefiles
Android.mk

module settings and declarations
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
Predefined macro can be:
BUILD_SHARED_LIBRARY, 

BUILD_STATIC_LIBRARY,

PREBUILT_SHARED_LIBRARY, PREBUILT_STATIC_LIBRARY
Other useful variables:
LOCAL_C_INCLUDES := ./headers/
LOCAL_EXPORT_C_INCLUDES := ./headers/
LOCAL_SHARED_LIBRARIES := module_shared
LOCAL_STATIC_LIBRARIES := module_static
Application.mk 

Application-wide settings
APP_PLATFORM := android-15 #~=minSDKVersion
APP_CFLAGS := -O3
APP_STL := gnustl_shared #or other STL if
you need extended C++ support
APP_ABI := all #or all32, all64…
APP_OPTIM := release #default
NDK_TOOCLHAIN_VERSION := 4.8 #4.6 is default,
4.8 brings perfs, 4.9 also but less stable
Arquitecturas deseadas (ABI)
Incluye todos los ABIs indicando APP_ABI = all en jni/Application.mk:
APP_ABI=all
El NDK generará código optimizado para todos los ABIs objetivo
También puedes pasar la variable APP_ABI a ndk-build, y especificar cada ABI:
ndk-build APP_ABI=x86
librería para ARM v7a
librería para ARM v5
librería para x86
librería para mips
‹#›
Extras
(anuncios y noticias)
‹#›
Intel INDE 

(Integrated Native Developer Experience)
Ambiente de desarrollo optimizado para construir
aplicaciones nativas.
Se integra con IDEs populares (Android Studio,
Visual Studio).
Incluye librerías nativas para alto desempeño
(procesamiento de gráficas, primitivas de cómputo
paralelo).
Facilita la creación y depuración de apps NDK.
https://software.intel.com/es-es/intel-inde
‹#›
Soporte para NDK en Android Studio
Android Studio (1.3) RC incluye el preview de soporte de C/C+
+ para construir apps con NDK.
Intel INDE aprovechará esta capacidad para brindar una
experiencia todavía mejor para construir apps NDK.
‹#›
Zona de Desarrolladores Intel en
Español
Visita http://software.intel.com/es-es/android para obtener:
Herramientas gratuitas
Artículos y guías
Foros de discusión
‹#›
Testing de apps en la nube
Aurora Rodríguez
#devday4w
‹#›
Diversidad en Android
Plataforma
Distintas versiones de Android OS.
Android OS personalizado por distintos fabricantes.
Form Factors
Smartphones, tablets, wearables.
TV, automóviles y más.
Disponibilidad de Hardware
Distinto hardware en distintas regiones.
http://opensignal.com/reports/2014/android-
fragmentation/
Variedad de dispositivos
Versiones de Plataforma
https://developer.android.com/about/dashboards
‹#›
Estrategias para probar
Emulador
Opciones
Android SDK.
Intel HAXM.
Genymotion.
Ventajas
Sencillo (desde tu IDE) y gratis*.
Desventajas
Lento.
No es suficiente para probar todas las
capacidades.
Dispositivo real
Ventajas
Mejor desempeño.
Permite probar usabilidad y UX.
Desventajas
Caro.
Dificultad para conseguir
variedad de hardware.
Probar en variedad de HW
agrega complejidad y tiempo.
‹#›
Testing basado en la nube
Dispositivos reales en un laboratorio en la nube.
Variedad de dispositivos disponible.
Seleccionas los dispositivos en los que quieres hacer tus
pruebas.
Opciones de proveedores
Xamarin Test Cloud - http://xamarin.com/test-cloud
TestDroid - http://testdroid.com
Google Cloud Test Lab* - https://developers.google.com/
cloud-test-lab/
‹#›
Testdroid
Gratis para dispositivos Intel (x86).
Puedes utilizar:
App Crawler para pruebas automáticas (recorrer pantallas, dar click en
botones, probar usuarios y passwords, etc).
Proveer archivo con test cases en JUnit para pruebas específicas.
Puedes ver pantallas de tu app en distintos dispositivos, bitácoras
de ejecución (logs), excepciones, profiling de CPU y memoria.
Ofrece un API para que puedas integrar en tu proceso de build y
automatizar la ejecución de las pruebas.
http://testdroid.com
‹#›
Testdroid demo
‹#›
Preguntas

Más contenido relacionado

Destacado

Publicación de Apps Universales
Publicación de Apps UniversalesPublicación de Apps Universales
Publicación de Apps Universales
Javier Suárez Ruiz
 
Herramientas para el desarrollo de Apps Universales
Herramientas para el desarrollo de Apps UniversalesHerramientas para el desarrollo de Apps Universales
Herramientas para el desarrollo de Apps Universales
Javier Suárez Ruiz
 
Actividad integradoraa
Actividad integradoraaActividad integradoraa
Actividad integradoraa
Rubi Cortés
 
Filippo
FilippoFilippo
Filippo
ADBUT
 
Temario conceptos básicos en torno á igualdade de oportunidades
Temario conceptos básicos en torno á igualdade de oportunidadesTemario conceptos básicos en torno á igualdade de oportunidades
Temario conceptos básicos en torno á igualdade de oportunidadesmarcendon
 
Sanoplan Novedades Tecnicas
Sanoplan Novedades TecnicasSanoplan Novedades Tecnicas
Sanoplan Novedades Tecnicas
Sanoplant
 
Rica Corp Deltek Solutions Brochure 112008
Rica Corp Deltek Solutions Brochure 112008Rica Corp Deltek Solutions Brochure 112008
Rica Corp Deltek Solutions Brochure 112008ricapower
 
Solomzi 2016 May 2
Solomzi 2016 May 2Solomzi 2016 May 2
Solomzi 2016 May 2
Moses Kgosibodiba
 
Canarias y las fiestas de Cruz.
Canarias y las fiestas de Cruz.Canarias y las fiestas de Cruz.
Canarias y las fiestas de Cruz.marinatoste
 
Harrods food & entertaining
Harrods food & entertainingHarrods food & entertaining
Harrods food & entertaining
Harrods
 
Digital strategy Insurance E-Broking Scotland
Digital strategy Insurance E-Broking ScotlandDigital strategy Insurance E-Broking Scotland
Digital strategy Insurance E-Broking Scotland
Dave Hazlehurst
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
Ricardo Valeriano
 
Buses: tipos y arquitectura
Buses: tipos y arquitecturaBuses: tipos y arquitectura
Buses: tipos y arquitecturadennissemayon0
 
Cp documation 2008 lancement
Cp documation 2008 lancementCp documation 2008 lancement
Master ortodoncia (UEM Valencia)
Master ortodoncia (UEM Valencia)Master ortodoncia (UEM Valencia)
Master ortodoncia (UEM Valencia)
ESTEMA
 
Pizarra virtual
Pizarra virtualPizarra virtual
Pizarra virtual
sssira
 
Linkedin Training - Advancment Your Profile.
Linkedin Training - Advancment Your Profile.Linkedin Training - Advancment Your Profile.
Linkedin Training - Advancment Your Profile.
Ali Tavanayan
 
Diventare avvocato-in-spagna-96-2001
Diventare avvocato-in-spagna-96-2001Diventare avvocato-in-spagna-96-2001
Diventare avvocato-in-spagna-96-2001Matteo Barberi
 

Destacado (20)

Publicación de Apps Universales
Publicación de Apps UniversalesPublicación de Apps Universales
Publicación de Apps Universales
 
Herramientas para el desarrollo de Apps Universales
Herramientas para el desarrollo de Apps UniversalesHerramientas para el desarrollo de Apps Universales
Herramientas para el desarrollo de Apps Universales
 
Actividad integradoraa
Actividad integradoraaActividad integradoraa
Actividad integradoraa
 
Filippo
FilippoFilippo
Filippo
 
Temario conceptos básicos en torno á igualdade de oportunidades
Temario conceptos básicos en torno á igualdade de oportunidadesTemario conceptos básicos en torno á igualdade de oportunidades
Temario conceptos básicos en torno á igualdade de oportunidades
 
Sanoplan Novedades Tecnicas
Sanoplan Novedades TecnicasSanoplan Novedades Tecnicas
Sanoplan Novedades Tecnicas
 
Rica Corp Deltek Solutions Brochure 112008
Rica Corp Deltek Solutions Brochure 112008Rica Corp Deltek Solutions Brochure 112008
Rica Corp Deltek Solutions Brochure 112008
 
Solomzi 2016 May 2
Solomzi 2016 May 2Solomzi 2016 May 2
Solomzi 2016 May 2
 
Canarias y las fiestas de Cruz.
Canarias y las fiestas de Cruz.Canarias y las fiestas de Cruz.
Canarias y las fiestas de Cruz.
 
Harrods food & entertaining
Harrods food & entertainingHarrods food & entertaining
Harrods food & entertaining
 
Digital strategy Insurance E-Broking Scotland
Digital strategy Insurance E-Broking ScotlandDigital strategy Insurance E-Broking Scotland
Digital strategy Insurance E-Broking Scotland
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
trabajo Merca
trabajo Mercatrabajo Merca
trabajo Merca
 
Buses: tipos y arquitectura
Buses: tipos y arquitecturaBuses: tipos y arquitectura
Buses: tipos y arquitectura
 
Cp documation 2008 lancement
Cp documation 2008 lancementCp documation 2008 lancement
Cp documation 2008 lancement
 
Master ortodoncia (UEM Valencia)
Master ortodoncia (UEM Valencia)Master ortodoncia (UEM Valencia)
Master ortodoncia (UEM Valencia)
 
Día de los Museos
Día de los MuseosDía de los Museos
Día de los Museos
 
Pizarra virtual
Pizarra virtualPizarra virtual
Pizarra virtual
 
Linkedin Training - Advancment Your Profile.
Linkedin Training - Advancment Your Profile.Linkedin Training - Advancment Your Profile.
Linkedin Training - Advancment Your Profile.
 
Diventare avvocato-in-spagna-96-2001
Diventare avvocato-in-spagna-96-2001Diventare avvocato-in-spagna-96-2001
Diventare avvocato-in-spagna-96-2001
 

Similar a Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama

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
Software Guru
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDKFe
 
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
 
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
Software Guru
 
Plataformas Android de Intel
Plataformas Android de Intel Plataformas Android de Intel
Plataformas Android de Intel
videos
 
Android de la A a la Z PARTE 2 de 3 ulises gonzalez
Android de la A a la Z  PARTE 2 de 3 ulises gonzalezAndroid de la A a la Z  PARTE 2 de 3 ulises gonzalez
Android de la A a la Z PARTE 2 de 3 ulises gonzalez
Android UNAM
 
Unidad 2 Primeros pasos con android
Unidad 2 Primeros pasos con androidUnidad 2 Primeros pasos con android
Unidad 2 Primeros pasos con android
Lorena García Arnau
 
Taller deandroid
Taller deandroidTaller deandroid
Taller deandroid
Dr. Edwin Hernandez
 
Ionic 2
Ionic 2 Ionic 2
Introducción a ndk
Introducción a ndkIntroducción a ndk
Introducción a ndk
Hector Alvarez
 
Arquitectura android
Arquitectura androidArquitectura android
Arquitectura androidalerop
 
Estructuras sdk
Estructuras sdkEstructuras sdk
Estructuras sdk
Jaqueline Luna
 
Angular 2 & nativescript… chau híbrido
Angular 2 & nativescript… chau híbridoAngular 2 & nativescript… chau híbrido
Angular 2 & nativescript… chau híbrido
melidevelopers
 
Android Studio - Ventajas y desventajas
Android Studio - Ventajas y desventajasAndroid Studio - Ventajas y desventajas
Android Studio - Ventajas y desventajasJorge Martín Espinosa
 
Exposición - Android
Exposición - AndroidExposición - Android
Exposición - Android
Luis Eduardo Pelaez Valencia
 
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
 
Arquitectura Android
Arquitectura AndroidArquitectura Android
Arquitectura Android
advillacorta
 
Android: Caracterización de Plataforma Móvil
Android: Caracterización de Plataforma MóvilAndroid: Caracterización de Plataforma Móvil
Android: Caracterización de Plataforma Móvil
Santiago Mejía Sánchez
 
WinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSWinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOS
Javier Suárez Ruiz
 
App inventor
App inventorApp inventor
App inventor
Mariaelena Moscoso
 

Similar a Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama (20)

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
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
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
 
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
 
Plataformas Android de Intel
Plataformas Android de Intel Plataformas Android de Intel
Plataformas Android de Intel
 
Android de la A a la Z PARTE 2 de 3 ulises gonzalez
Android de la A a la Z  PARTE 2 de 3 ulises gonzalezAndroid de la A a la Z  PARTE 2 de 3 ulises gonzalez
Android de la A a la Z PARTE 2 de 3 ulises gonzalez
 
Unidad 2 Primeros pasos con android
Unidad 2 Primeros pasos con androidUnidad 2 Primeros pasos con android
Unidad 2 Primeros pasos con android
 
Taller deandroid
Taller deandroidTaller deandroid
Taller deandroid
 
Ionic 2
Ionic 2 Ionic 2
Ionic 2
 
Introducción a ndk
Introducción a ndkIntroducción a ndk
Introducción a ndk
 
Arquitectura android
Arquitectura androidArquitectura android
Arquitectura android
 
Estructuras sdk
Estructuras sdkEstructuras sdk
Estructuras sdk
 
Angular 2 & nativescript… chau híbrido
Angular 2 & nativescript… chau híbridoAngular 2 & nativescript… chau híbrido
Angular 2 & nativescript… chau híbrido
 
Android Studio - Ventajas y desventajas
Android Studio - Ventajas y desventajasAndroid Studio - Ventajas y desventajas
Android Studio - Ventajas y desventajas
 
Exposición - Android
Exposición - AndroidExposición - Android
Exposición - 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
 
Arquitectura Android
Arquitectura AndroidArquitectura Android
Arquitectura Android
 
Android: Caracterización de Plataforma Móvil
Android: Caracterización de Plataforma MóvilAndroid: Caracterización de Plataforma Móvil
Android: Caracterización de Plataforma Móvil
 
WinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSWinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOS
 
App inventor
App inventorApp inventor
App inventor
 

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 Cosas
Software 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 reales
Software Guru
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
Software 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 Senior
Software 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 ideal
Software Guru
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
Software 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 learning
Software Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
Software 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.0
Software 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 StencilJS
Software 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 DevOps
Software 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 productivos
Software 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 stress
Software 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 goals
Software 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 Covid19
Software 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ño
Software 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

Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
JuanPrez962115
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 

Último (20)

Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 

Introducción al Desarrollo de NDK apps | Dev Day 4 Woman | @condesa_sama

  • 1. ‹#› Introducción al Desarrollo de NDK apps Aurora Rodríguez #devday4w
  • 2. ‹#› ¿Quién soy y qué hago? @condesa_sama
  • 3. ‹#› Agenda ¿Qué es una aplicación nativa? Introducción a NDK JNI Configuración de builds
  • 5. ‹#› Distintas arquitecturas de Android apps Apps nativas Se programa en Java. Se invoca directamente las librerías y componentes del SDK de Android. Apps HTML5 híbridas Usa tecnologías web (HTML5, CSS, Javascript). No se programa directo al SDK de Android sino hacia un framework intermedio (ej. Cordova).
  • 6. ‹#› ¿Cuándo elegir cada una? Nativo Mejor desempeño y experiencia de usuario. Híbrido Mayor portabilidad.
  • 7. ‹#› Pero la cosa no queda ahí…
  • 8. ‹#› Apps verdaderamente nativas 
 Código nativo (C, C++, ASM) compilado como librerías binarias que invocas desde tu app.
  • 9. ‹#› Native Development Kit (NDK) Conjunto de herramientas y build scripts que permiten incorporar código nativo (C/C++) en aplicaciones Android. Con NDK generas librerías binarias para cada arquitectura de procesador. Las librerías binarias se pueden invocar desde Java por medio de JNI (Java Native Interface).
  • 10. ‹#› ¿Arquitectura de procesador? Android es soportado en una gran variedad de dispositivos con distintos tipos de arquitectura de procesador (ARM, ARM v7, x86, x86_64, MIPS). Los binarios compilados para una arquitectura de procesador no funcionan para otra arquitectura. Es necesario compilar binarios para cada arquitectura que desees soportar.
  • 13. Código C/C++ Makefile ndk-build Mezclar con Java GDB debug Java Framework SDK APIs JNI Librerías nativas Aplicación Android* NDK APIs Librería Bionic C Usando JNI Flujo de Desarrollo con NDK
  • 14. Aplicación Android* NDK Aplicación Dalvik* Archivos .class Fuente Java Compilar con Javac Librería nativa Java .class Librería nativa Java* Compilar con Javac Crear header C con javah -jni Archivo Header Código fuente C/ C++ Compilar y linkear Código C Librería dinámica Archivos de la aplicación Makefile Opcional gracias a JNI_Onload Arquitectura de aplicación NDK
  • 15. ‹#› Compatibilidad con C/C++ Standard Librería Bionic C: Más liviana que que la librería GNU C standard Soporte limitado de pthread. Acceso a las propiedades del sistema Android Bionic no es compatible a nivel binario con C standard Por ello hay que (re)compilar usando NDK.
  • 16. ‹#› Instalación de Android NDK Descargar desde https://developer.android.com/ndk/downloads Instalación incluye: Herramientas y scripts para compilar. Headers y librerías. Documentación y ejemplos de código
  • 17. Agregar manualmente código nativo a proyecto existente Estructura típica de proyecto Carpeta JNI 1. Crear carpeta JNI para fuentes de código nativo. 2. Crear Makefile Android.mk 3. Construir librerías nativas usando el script NDK-BUILD NDK-BUILD creará automáticamente las carpetas de librerías ABI.
  • 18. Agregar soporte para NDK desde Eclipse
  • 19. Consulta los ejemplos incluidos App de muestra Tipo hello-jni Llama a una función nativa escrita en C desde Java*. bitmap-plasma Accede a un objeto Android* Bitmap desde C. san-angeles Código EGL y OpenGL* ES en C. hello-gl2 Setup EGL en Java y código OpenGL ES en C. native-activity Muestra OpenGL solo en C
 (sin Java, usa la clase NativeActivity). native-plasma Muestra OpenGL solo en C
 (también usa la clase NativeActivity). …
  • 21. ‹#› Integración de código nativo con Java En tu código Java, declara métodos nativos usando la palabra clave “nativa”: public native String stringFromJNI(); Proporciona la librería nativa compartida que contiene los métodos usados por tu aplicación y que construiste con NDK (ndk-build). libMyLib.so • Antes de usar la librería, debemos cargarla usando System.loadLibrary
  • 22. La función C que será mapeada: jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "Hello from JNI !"); } ... { ... tv.setText( stringFromJNI() ); ... } public native String stringFromJNI(); static { System.loadLibrary("hello-jni"); } Integración de código nativo con Java
  • 24. Makefiles Android.mk
 module settings and declarations LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) Predefined macro can be: BUILD_SHARED_LIBRARY, 
 BUILD_STATIC_LIBRARY,
 PREBUILT_SHARED_LIBRARY, PREBUILT_STATIC_LIBRARY Other useful variables: LOCAL_C_INCLUDES := ./headers/ LOCAL_EXPORT_C_INCLUDES := ./headers/ LOCAL_SHARED_LIBRARIES := module_shared LOCAL_STATIC_LIBRARIES := module_static Application.mk 
 Application-wide settings APP_PLATFORM := android-15 #~=minSDKVersion APP_CFLAGS := -O3 APP_STL := gnustl_shared #or other STL if you need extended C++ support APP_ABI := all #or all32, all64… APP_OPTIM := release #default NDK_TOOCLHAIN_VERSION := 4.8 #4.6 is default, 4.8 brings perfs, 4.9 also but less stable
  • 25. Arquitecturas deseadas (ABI) Incluye todos los ABIs indicando APP_ABI = all en jni/Application.mk: APP_ABI=all El NDK generará código optimizado para todos los ABIs objetivo También puedes pasar la variable APP_ABI a ndk-build, y especificar cada ABI: ndk-build APP_ABI=x86 librería para ARM v7a librería para ARM v5 librería para x86 librería para mips
  • 27. ‹#› Intel INDE 
 (Integrated Native Developer Experience) Ambiente de desarrollo optimizado para construir aplicaciones nativas. Se integra con IDEs populares (Android Studio, Visual Studio). Incluye librerías nativas para alto desempeño (procesamiento de gráficas, primitivas de cómputo paralelo). Facilita la creación y depuración de apps NDK. https://software.intel.com/es-es/intel-inde
  • 28. ‹#› Soporte para NDK en Android Studio Android Studio (1.3) RC incluye el preview de soporte de C/C+ + para construir apps con NDK. Intel INDE aprovechará esta capacidad para brindar una experiencia todavía mejor para construir apps NDK.
  • 29. ‹#› Zona de Desarrolladores Intel en Español Visita http://software.intel.com/es-es/android para obtener: Herramientas gratuitas Artículos y guías Foros de discusión
  • 30. ‹#› Testing de apps en la nube Aurora Rodríguez #devday4w
  • 31. ‹#› Diversidad en Android Plataforma Distintas versiones de Android OS. Android OS personalizado por distintos fabricantes. Form Factors Smartphones, tablets, wearables. TV, automóviles y más. Disponibilidad de Hardware Distinto hardware en distintas regiones.
  • 34. ‹#› Estrategias para probar Emulador Opciones Android SDK. Intel HAXM. Genymotion. Ventajas Sencillo (desde tu IDE) y gratis*. Desventajas Lento. No es suficiente para probar todas las capacidades. Dispositivo real Ventajas Mejor desempeño. Permite probar usabilidad y UX. Desventajas Caro. Dificultad para conseguir variedad de hardware. Probar en variedad de HW agrega complejidad y tiempo.
  • 35. ‹#› Testing basado en la nube Dispositivos reales en un laboratorio en la nube. Variedad de dispositivos disponible. Seleccionas los dispositivos en los que quieres hacer tus pruebas. Opciones de proveedores Xamarin Test Cloud - http://xamarin.com/test-cloud TestDroid - http://testdroid.com Google Cloud Test Lab* - https://developers.google.com/ cloud-test-lab/
  • 36. ‹#› Testdroid Gratis para dispositivos Intel (x86). Puedes utilizar: App Crawler para pruebas automáticas (recorrer pantallas, dar click en botones, probar usuarios y passwords, etc). Proveer archivo con test cases en JUnit para pruebas específicas. Puedes ver pantallas de tu app en distintos dispositivos, bitácoras de ejecución (logs), excepciones, profiling de CPU y memoria. Ofrece un API para que puedas integrar en tu proceso de build y automatizar la ejecución de las pruebas. http://testdroid.com