Usar JNI en Openframeworks Android (Parte II)

En esta segunda entrada, veremos cómo llamar código Openframeworks desde método Java Android.
Para realizar este tipo de comunicación es necesario editar dos ficheros de nuestro proyecto Openframeworks Android: “OFActivity.java” (para la parte Java) y “ofApp.cpp” (para la parte C++).
Empezaremos editando la parte C++, añadiendo el siguiente método:
extern "C"{ JNIEXPORT void JNICALL Java_cc_openframeworks_activitiesOF_OFActivity_callCmethod(JNIEnv *, jobject){ /** * This code runs when "callCmethod" function is called in OFActivity.java (Java side) */ ofLog() << "C++ Method called from Java" << endl; } }
En la cabecera del método, vemos la ruta del package del proyecto Openframeworks Android, siendo la última palabra ‘callCmethod‘ el nombre del método que debemos llamar en la parte Java (OFActivity.java) de la siguiente manera:
- Declaramos una cabecera del método que hemos llamado ‘callCmethod‘ ya que debe coincidir con el método declarado en la parte C++:
public native void callCmethod();
- Usaremos este método en el onClick de un button de la interface gráfica que trae Android en su SDK y que hemos añadido al layout de Openframeworks con el editor de eclipse:
En este caso, hemos llamado a la función onClick con la propiedad ‘showOFlogMessage’ y en la parte de código Java (OFActivity.java) añadiremos el siguiente código:
public void showOFlogMessage(View view){ /** * Call native method (code in C++, stored at ofApp.cpp) */ callCmethod(); }
Por lo tanto, cuando ejecutemos nuestra aplicación y hagamos click en el botón Android que está en nuestra pantalla de Openframeworks, estaremos llamando al código que está situado en ofApp.cpp. En el caso del ejemplo, al ejecutarse, veremos por consola:
ofLog() << "C++ Method called from Java" << endl;
Esta primera opción de comunicación nos ha permitido ejecutar sentencias de Openframeworks durante la ejecución de elementos de código de Java Android. Esta metodología será útil para llamar a un Activity de OF desde un contexto nativo de Android. De esta manera, podremos ejecutar elementos más complejos programados en OF (o simplemente nuestra aplicación principal).
En el siguiente post, hablaremos de cómo llamar código nativo del SDK Android desde Openframeworks.