SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
‹#›
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

Weitere ähnliche Inhalte

Andere mochten auch

Publicación de Apps Universales
Publicación de Apps UniversalesPublicación de Apps Universales
Publicación de Apps UniversalesJavier 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 UniversalesJavier Suárez Ruiz
 
Actividad integradoraa
Actividad integradoraaActividad integradoraa
Actividad integradoraaRubi Cortés
 
Filippo
FilippoFilippo
FilippoADBUT
 
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 TecnicasSanoplant
 
Rica Corp Deltek Solutions Brochure 112008
Rica Corp Deltek Solutions Brochure 112008Rica Corp Deltek Solutions Brochure 112008
Rica Corp Deltek Solutions Brochure 112008ricapower
 
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 & entertainingHarrods
 
Digital strategy Insurance E-Broking Scotland
Digital strategy Insurance E-Broking ScotlandDigital strategy Insurance E-Broking Scotland
Digital strategy Insurance E-Broking ScotlandDave 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
 
Master ortodoncia (UEM Valencia)
Master ortodoncia (UEM Valencia)Master ortodoncia (UEM Valencia)
Master ortodoncia (UEM Valencia)ESTEMA
 
Pizarra virtual
Pizarra virtualPizarra virtual
Pizarra virtualsssira
 
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
 

Andere mochten auch (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
 

Ähnlich wie 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 NivelSoftware 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 nativasSoftware 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 gonzalezAndroid UNAM
 
Unidad 2 Primeros pasos con android
Unidad 2 Primeros pasos con androidUnidad 2 Primeros pasos con android
Unidad 2 Primeros pasos con androidLorena García Arnau
 
Arquitectura android
Arquitectura androidArquitectura android
Arquitectura androidalerop
 
Angular 2 & nativescript… chau híbrido
Angular 2 & nativescript… chau híbridoAngular 2 & nativescript… chau híbrido
Angular 2 & nativescript… chau híbridomelidevelopers
 
Android Studio - Ventajas y desventajas
Android Studio - Ventajas y desventajasAndroid Studio - Ventajas y desventajas
Android Studio - Ventajas y desventajasJorge Martín Espinosa
 
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 Androidadvillacorta
 
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óvilSantiago Mejía Sánchez
 
WinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSWinObjC: Windows Bridge para iOS
WinObjC: Windows Bridge para iOSJavier Suárez Ruiz
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

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
 
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
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
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
 
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
 
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
 

Kürzlich hochgeladen (11)

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
 
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
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
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
 
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
 
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
 

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