Usar JNI en Openframeworks Android (Parte I)
Este tutorial es una pequeña introducción a JNI (Java Native Interface) en la que veremos sus ventajas y usos en el entorno Openframeworks Android (OF Android). Concretamente, veremos como hacer llamadas a elementos nativos desde una aplicación de OpenFrameworks. Esta comunicación abre un abanico de posibilidades muy amplio y reduce la complejidad de los proyectos, ya que podremos aprovecharnos de la potencia de los elementos del SDK de Android.
Para usar este tutorial debes tener Eclipse instalado y Openframeworks Android descargado y operativo, tal y como se detalla en este tutorial.
Introducción JNI
Java Native Interface (JNI) es un framework de programación que permite a un programa escrito en Java – ejecutado en una máquina virtual- ejecutar y interactuar con programas escritos en otros lenguajes como C, C++ y ensamblador. Así pues, sabiendo que Android se ejecuta en base a Java, la propia distribución de Openframeworks Android ya usa el framework JNI para compilar y ejecutar los programas en Openframeworks (en base C++) en los dispositivos con sistema Android (en base Java).
¿Por qué JNI en Openframeworks?
Una de las principales características que el lenguaje Java ofrece es su portabilidad, y usando JNI en principio se limita esa portabilidad a dispositivos capaces de correr código nativo. Paradójicamente, en el entorno Openframeworks el uso del framework JNI añade portabilidad, siendo así capaz de ejecutar los programas de Openframeworks en plataformas Android. Mediante este procedimiento se consigue ampliar la capacidad “crossplatform” que Openframeworks ya ofrece.
¿Quiero usar JNI en Openframeworks?
Como se acaba de comentar, Openframeworks ya usa JNI para poder ejecutase en Android. Sin embargo, resulta una buena idea poder combinar las potencialidades que Openframeworks concede junto con las que proporciona el SDK de Android. De esta manera, se reduce la complejidad en la programación (gracias al SDK Android) y podremos realizar aplicaciones para Android completas y con buenos acabados finales.
Por lo tanto, una buena estrategia a seguir es realizar nuestros programas en Openframeworks, y usar JNI para aprovechar los elementos de los que solo dispone Android. De esta manera, completaremos nuestro software creativo de manera mas sencilla y eficaz.
Un buen ejemplo de uso de JNI es el de invocar el teclado del dispositivo móvil Android a partir de una interface Openframeworks (usando el addon ofxGui, por ejemplo) para que el usuario introduzca datos.
Otro caso de uso es el control de pantallas o Activities que componen una App Android. Usando JNI podremos crear aplicaciones con navegación e interfaz que nos proporcionan el SDK Android y complementarlas con las potencialidades visuales y de cálculo que ofrece OF Android.
¿Cómo amplio mi App en Openframeworks con JNI?
Existen, a grandes rasgos, dos maneras de comunicación con JNI en función de nuestras necesidades. La primera es que invoquemos código Openframeworks (C++) desde un método en la parte Java Android. La segunda es justamente el camino inverso, es decir, que invoquemos código Java Android, desde nuestro flow de programa en Openframeworks (C++).
En los siguientes partes de este tutorial se tratarán estas dos cuestiones.
- TUTORIAL: Cómo usar JNI en Openframeworks Android (Parte II: Llamar a OF desde Java).
- TUTORIAL: Cómo usar JNI en Openframeworks Android (Parte III: Llamar a Java desde OF).