20
3 de Mayo 2016 Héctor Álvarez Díaz

Introducción a ndk

Embed Size (px)

Citation preview

Page 1: Introducción a ndk

3 de Mayo 2016

Héctor Álvarez Díaz

Page 2: Introducción a ndk

• Aplicaciones Realizadas en JAVA y XML

• El mismo código para múltiples plataformas (Dalvik VM)

• JAVA no se compila se "Traduce" a Bytecode y luego se interpreta a lenguaje máquina.

• Se pierde velocidad en el proceso

Page 3: Introducción a ndk

Native Development Kit (NDK)

• Es un set de herramientas que nos permite utilizar lenguajes como C y C++ en Android.

• Nos permite compilar ejecutables y/o librerías nativamente.

• Usa Java Native Interface(JNI) para comunicarse.

Page 4: Introducción a ndk

• Necesita compilarse para cada arquitectura diferente (x86, ARM, etc)

• Más difícil en debuggear

• Puede producir problemas de compatibilidad

• Agrega mayor complejidad al proyecto (JAVA y C/C++ en múltiples dispositivos = muchos dolores de cabeza)

Page 5: Introducción a ndk

• Reutilizar Código y librerías en C/C++

• Mayor Rendimiento de la aplicación (Algoritmos Complejos, juegos, multimedia, etc.)

• Aprovechar optimizaciones del procesador (SSE, AES, etc)

• Aplicaciones más fluidas

Page 6: Introducción a ndk

• Requisitos:Tener instalado Android Studio

Usar sistema operativo x86_64 (64Bits)

Page 7: Introducción a ndk

Ir a "Configure" -> SDK Manager

Page 8: Introducción a ndk

Clickear "Android NDK" y luego en el botón Apply

Page 9: Introducción a ndk

Confirmar la versión a instalar

Page 10: Introducción a ndk

Aceptar la Licencia y presionar el botón "Next"

Page 11: Introducción a ndk

Terminado el proceso, "Android NDK" aparece como "Installed"

Page 12: Introducción a ndk

• Para dar soporte a NDK, primero necesitamos modificar el archivo "build.gradle (Project)".

• Cambiaremos la dependencia "classpath", la linea similar a esta (generalmente la linea 8):

'com.android.tools.build:gradle:2.1.2'

por:

'com.android.tools.build:gradle-experimental:0.7.0-rc1'

• Ahora gradle reconocerá los proyectos con NDK.

Page 13: Introducción a ndk

• Continuando, modificaremos el build.gradle (Module):• En este archivo solo se agregan las siguientes llaves para

incluir los módulos que se compilarán con ndk.• Incluimos el módulo:

ndk{ moduleName = "fibonacci-jni" toolchain = 'clang' CFlags.addAll(['-Wall']) }

• moduleName es el nombre de la clase en C/C++ que queremos compilar.

• toolchain es la herramienta con la se se compilará el módulo.

• CFlags.addALL(), agrega optimizaciones y configuraciones de compilación al compilador (clang, gcc, etc).

Page 14: Introducción a ndk

• Luego incluimos el soporte para distintas arquitecturas de procesador, en el mismo archivo " build.gradle (APP) ".

productFlavors { create("arm") { ndk.abiFilters.add("armeabi") }

... create("all") }

• Se pueden agregar las arquitecturas deseadas por separado o incluirlas todas con create("all")

• En el repositorio de github pueden encontrar el código completo

Page 15: Introducción a ndk

• Luego en la clase principal del proyecto creamos una función de tipo native y llamamos a la librería:

public native String fibboJni();

static{ System.loadLibrary("fibonacci-jni"); }

• Como Android Studio está para facilitarnos la vida, nos mostrará una ayuda para crear la clase jni Nativa con el icono de bombilla.

• Listo, ya podemos hacer llamadas nativas en nuestro proyecto.

Page 16: Introducción a ndk

¿Qué es JNI?:Java Native Interface, es un framework que nos permite interactuar entre JAVA y el código nativo en C/C++.

Page 17: Introducción a ndk

• Para acceder al código pueden ingresar al siguiente dirección de Github:

https://github.com/Phoenix2140/EjemploNDK-JNI

Page 18: Introducción a ndk
Page 19: Introducción a ndk
Page 20: Introducción a ndk