3 de Mayo 2016
Héctor Álvarez Díaz
• 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
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.
• 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)
• 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
• Requisitos:Tener instalado Android Studio
Usar sistema operativo x86_64 (64Bits)
Ir a "Configure" -> SDK Manager
Clickear "Android NDK" y luego en el botón Apply
Confirmar la versión a instalar
Aceptar la Licencia y presionar el botón "Next"
Terminado el proceso, "Android NDK" aparece como "Installed"
• 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.
• 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).
• 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
• 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.
¿Qué es JNI?:Java Native Interface, es un framework que nos permite interactuar entre JAVA y el código nativo en C/C++.
• Para acceder al código pueden ingresar al siguiente dirección de Github:
https://github.com/Phoenix2140/EjemploNDK-JNI
Top Related