標籤:void local port strong jnienv ase oid har bool
學習Android Jni時,一個二維 整數 數組的傳遞花了我好長時間,在網上查的資料都不全,當然最後是成功了,寫在這裡是為了自己記住,當然有人搜尋到並利用了我會很高興。
in Android Java file
public native boolean add(
int[][] qizidata,.....)用JDK工具生產jni 的*.h檔案your project path> ..Javajdk1.6.0_10binjavah -classpath ./bin JAVA Class name
//**************************************************************************//二維數組java -》JniJNIEXPORT jint JNICALL Java_com_Jung_add (JNIEnv * env, jobjectobj, jobjectArray qizidata,jint value1, jintvalue2) { jinti,j; jintqizi[1024][1024]; //固定數組,測試用 jarraymyarray; intsize = (*env)->GetArrayLength(env, qizidata); for (i= 0; i < size &&i<1024 ; i++) { myarray =((*env)->GetObjectArrayElement(env, qizidata,i)); int col = (*env)->GetArrayLength(env,myarray); jint *coldata =(*env)->GetIntArrayElements(env, (jintArray)myarray,0 ); for (j=0; j<col&& j <1024;j++) { qizi[i][j]= coldata[j]; } (*env)->ReleaseIntArrayElements(env,(jintArray)myarray, coldata,0 ); } return(qizi[0][0]+qizi[9][0]);}
//**************************************************************************//二維數組Jni -》Java JNIEXPORT jobjectArray JNICALLJava_com_marakana_NativeLib_GetIntArray
(JNIEnv *env, jobject obj, jintx, jint y)
{ jobjectArray ret; int i =0; int j =0; jclassintArrCls = (*env)->FindClass(env, "[I"); if (NULL== intArrCls) return NULL; ret =(*env)->NewObjectArray(env, x * y, intArrCls,NULL); jinttmp[1024];//固定數組,測試用,注意別溢出 for (i= 0; i < x; i++) { jintArray intArr =(*env)->NewIntArray(env,y); for (j = 0; j <y; j++) { tmp[j] = i + j; } (*env)->SetIntArrayRegion(env,intArr, 0, y,tmp); (*env)->SetObjectArrayElement(env,ret, i,intArr); (*env)->DeleteLocalRef(env,intArr); } returnret;}//**************************************************************************//下面代碼是網上搜的,沒驗證,忘記出處了,請原作者見諒// 二維String數組 JNI 提取 c_languge syntaxJNIEXPORT void JNICALL Java_TestArray_PrintArrays(JNIEnv *env, jclass class, jobjectArray array){ intsize = (*env)->GetArrayLength(env, array); for(int i = 0; i < size; i++) { jarray myarray =((*env)->GetObjectArrayElement(env, array,i)); int leng =(*env)->GetArrayLength(env, myarray); printf("length: %dn",leng); for (int j = 0; j< leng; j++) { jstring string =((*env)->GetObjectArrayElement(env, myarray,i)); const char * chars =(*env)->GetStringUTFChars(env, string, 0); printf("%s n", chars); (*env)->ReleaseStringUTFChars(env,string, chars); } }}
Android jni 二維數組 傳遞