2. • 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
3. 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.
4. • 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)
5. • 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
12. • 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.
13. • 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).
14. • 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
15. • 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.
16. ¿Qué es JNI?:
Java Native Interface, es un framework que nos permite
interactuar entre JAVA y el código nativo en C/C++.
17. • Para acceder al código pueden ingresar al siguiente
dirección de Github:
https://github.com/Phoenix2140/EjemploNDK-JNI