¿Cómo devolver una matriz de JNI a Java?

Estoy intentando usar el Android NDK.

¿Hay alguna manera de devolver una matriz (en mi caso, una int[] ) creada en JNI a Java? De ser así, proporcione un ejemplo rápido de la función JNI que haría esto.

-Gracias

Si ha examinado la documentación y todavía tiene preguntas que deberían ser parte de su pregunta inicial. En este caso, la función JNI en el ejemplo crea un número de matrices. La matriz externa se compone de una matriz ‘Objeto’ que crea con la función JNI NewObjectArray() . Desde la perspectiva de JNI, eso es todo una matriz bidimensional, una matriz de objetos que contiene una serie de otras matrices internas.

El siguiente ciclo for crea las matrices internas que son de tipo int [] utilizando la función JNI NewIntArray() . Si solo desea devolver una matriz dimensional única de enteros, la función NewIntArray() es lo que usaría para crear el valor devuelto. Si quisiera crear una matriz tridimensional única de cadenas, usaría la función NewObjectArray() pero con un parámetro diferente para la clase.

Como quiera devolver una matriz int, su código se verá más o menos así:

 JNIEXPORT jintArray JNICALL Java_ArrayTest_initIntArray(JNIEnv *env, jclass cls, int size) { jintArray result; result = (*env)->NewIntArray(env, size); if (result == NULL) { return NULL; /* out of memory error thrown */ } int i; // fill a temp structure to use to populate the java int array jint fill[size]; for (i = 0; i < size; i++) { fill[i] = 0; // put whatever logic you want to populate the values here. } // move from the temp structure to the java structure (*env)->SetIntArrayRegion(env, result, 0, size, fill); return result; } 

si a alguien le gustaría saber cómo devolver String [] array:

código java

 private native String[] data(); 

exportación nativa

 JNIEXPORT jobjectArray JNICALL Java_example_data() (JNIEnv *, jobject); 

código nativo

  JNIEXPORT jobjectArray JNICALL Java_example_data (JNIEnv *env, jobject jobj){ jobjectArray ret; int i; char *message[5]= {"first", "second", "third", "fourth", "fifth"}; ret= (jobjectArray)env->NewObjectArray(5, env->FindClass("java/lang/String"), env->NewStringUTF("")); for(i=0;i<5;i++) { env->SetObjectArrayElement( ret,i,env->NewStringUTF(message[i])); } return(ret); } 

del enlace: http://www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java

La solución simple es escribir los datos de la matriz en un archivo desde C y luego acceder al archivo desde Java