最近在做android开发涉及到JNI的函数调用,总结了一些经验。
1.对于JNI中有多维数组相关参数传递的情况,可以将多维数组化为一维数组,然后进行传递。
因为在JAVA中int[3][4] 与int[12]是可以相互转化的。
2.对于一维数组的传递,记录如下:
上面例子包含了多维数组的传入处理,及一维数组的返回。
对于不同类型的对象调用的创建函数是不同的,这个需要查找JNI头文件。
可以看附件
1.对于JNI中有多维数组相关参数传递的情况,可以将多维数组化为一维数组,然后进行传递。
因为在JAVA中int[3][4] 与int[12]是可以相互转化的。
2.对于一维数组的传递,记录如下:
JNIEXPORT jbyteArray JNICALL JNI_SaveAsBuffer
(JNIEnv *env,jclass clazz, ,jintarray in)
{//in is a int[][]
jbyteArray byteArr = 0;
MLong byteSize = 30;
jbyte temp[30] = {0};
jint i,j,mData[100][100]; //只是测试,固定的数组大小
jarray myarray;
int size = env->GetArrayLength(in);
for (i = 0; i < size && i<100; i++)
{
myarray = (jarray)(env->GetObjectArrayElement(in, i));
int col = env->GetArrayLength(myarray);
jint *coldata = env->GetIntArrayElements((jintArray)myarray, 0 );
for (j=0; j<col && j <100; j++)
{
mData[i][j] = coldata[j];//获取数据
}
env->ReleaseIntArrayElements((jintArray)myarray, coldata,0 );
}
byteArr = env->NewByteArray(byteSize);
env->SetByteArrayRegion(byteArr,0,byteSize,(jbyte*)temp);
return byteArr;
}
上面例子包含了多维数组的传入处理,及一维数组的返回。
对于不同类型的对象调用的创建函数是不同的,这个需要查找JNI头文件。
可以看附件