JNI 中需要操作一个数组,但这个数组是在Java中声明的,怎么实现呢?
需要进行操作的数组:
int[] intArray = {1, 5, 2, 4, 9, 6};
Java 类中的native方法:
private native void array(int[] array);
JNI 中的方法:
extern "C"
JNIEXPORT void JNICALL
Java_com_example_MainActivity_array(JNIEnv *env, jobject instance,jintArray array_)
{
int size = env->GetArrayLength(array_);
int *array = env->GetIntArrayElements(array_, NULL);
for (int i = 0; i <size; ++i) {
*(array + i) += 10; //将数组中的每个元素加10
}
env->ReleaseIntArrayElements(array_, array, 0);
}
实际调用:
int[] intArray = {1, 5, 2, 4, 9, 6};
array(intArray);
// 循环输出日志
for (int i = 0; i < intArray.length; i++) {
Log.d(TAG, "onCreate: intArray[" + i + "] = " + intArray[i]);
}
日志输出:
04-25 09:24:01.879 onCreate: intArray[0] = 11
04-25 09:24:01.879 onCreate: intArray[1] = 15
04-25 09:24:01.879 onCreate: intArray[2] = 12
04-25 09:24:01.879 onCreate: intArray[3] = 14
04-25 09:24:01.879 onCreate: intArray[4] = 19
04-25 09:24:01.879 onCreate: intArray[5] = 16