JNI交互间数组的处理
一.生成native层的数组的拷贝方式:
1.在MainActivity中添加如下native方法:
public static native int[] updateIntArray(int[] data);
2.通过javah命令生成上述方法的头文件com_child_hellondk_MainActivity.h3.在hello.c文件中实现该native方法:
JNIEXPORT jintArray JNICALL Java_com_child_hellondk_MainActivity_updateIntArray
(JNIEnv *env, jclass jclass, jintArray array){
//将java层传递过来的array拷贝到nativeArray数组中
jint nativeArray[5];
(*env)->GetIntArrayRegion(env, array, 0, 5, nativeArray);
//将nativeArray数组每个位置+5
int i;
for(i=0; i < 5; i++){
nativeArray[i] += 5;
LOGV("From c int %d", nativeArray[i]);
}
//重新将nativeArray数组拷贝到array中
(*env)->SetIntArrayRegion(env, array, 0, 5, nativeArray);
//返回array
return array;
}
4.在MainActivity中调用该native方法:
int[] data = {1,2,3,4,5};
int[] result = updateIntArray(data);
for(int i = 0; i < result.length; i++){
Log.i("nate", "i="+result[i]);
}
5.运行即可.
————————————————————————————————————
二.通过数组指针进行操作
1.在MainActivity中添加如下native方法:
public static native int[] updateIntArray(int[] data);
2.通过javah命令生成上述方法的头文件com_child_hellondk_MainActivity.h
3.在hello.c文件中实现该native方法:
JNIEXPORT jintArray JNICALL Java_com_child_hellondk_MainActivity_updateIntArray
(JNIEnv *env, jclass jclass, jintArray array){
//生成数组的指针
jint* data = (*env)->GetIntArrayElements(env, array, NULL);
jsize len = (*env)->GetArrayLength(env, array);
//数组每个位置+10
int j;
for(j = 0; j < len; j++){
data[j] += 10;
LOGV("From c int %d", data[j]);
}
//释放相关的资源
(*env)->ReleaseIntArrayElements(env, array, data, 0);
//返回array
return array;
}
4.在MainActivity中调用该native方法:
int[] data = {1,2,3,4,5};
int[] result = updateIntArray(data);
for(int i = 0; i < result.length; i++){
Log.i("nate", "i="+result[i]);
}
5.运行即可.