Introducción a ndk
-
Upload
hector-alvarez -
Category
Technology
-
view
94 -
download
1
Transcript of Introducción a ndk
![Page 1: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/1.jpg)
3 de Mayo 2016
Héctor Álvarez Díaz
![Page 2: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/2.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/3.jpg)
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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/4.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/5.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/6.jpg)
• Requisitos:Tener instalado Android Studio
Usar sistema operativo x86_64 (64Bits)
![Page 7: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/7.jpg)
Ir a "Configure" -> SDK Manager
![Page 8: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/8.jpg)
Clickear "Android NDK" y luego en el botón Apply
![Page 9: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/9.jpg)
Confirmar la versión a instalar
![Page 10: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/10.jpg)
Aceptar la Licencia y presionar el botón "Next"
![Page 11: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/11.jpg)
Terminado el proceso, "Android NDK" aparece como "Installed"
![Page 12: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/12.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/13.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/14.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/15.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/16.jpg)
¿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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/17.jpg)
• 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](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/18.jpg)
![Page 19: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/19.jpg)
![Page 20: Introducción a ndk](https://reader031.fdocuments.ec/reader031/viewer/2022021923/58eccba31a28ab4b328b479b/html5/thumbnails/20.jpg)