- java中本地方法:
向java的本地方法中传入一个int型数组,在C/C++层将数组中的元素值各自 加10之后返回
/* JNI返回数组arrys并将每个元素的值加10 */
public native int[] intMathod(int[] arrys);
- C++代码实现:
JNIEXPORT jintArray JNICALL Java_com_example_jnitest_JNITest_intMathod
(JNIEnv *env, jobject jobj, jintArray jintArray) {
/* 获取数组长度 */
jint jlen = env->GetArrayLength(jintArray);
LOGE("Array length: %d", jlen);
/* 获取数组元素:不以复制的形式获取 */
jint* jArr = env->GetIntArrayElements(jintArray, 0);
for (int i = 0; i < jlen; i++)
{
*(jArr + i) += 10;
}
/* 释放资源 */
env->ReleaseIntArrayElements(jintArray, jArr, 0);
return jintArray;
}
- 测试代码:
int[] arrays = {1, 2, 3};
JNITest obj = new JNITest();
int[] arraysNew = obj.intMathod(arrays);
for (int i = 0; i < arraysNew.length; i++)
{
Log.e(TAG, "onClick: arrys:" + arraysNew[i]);
}
代码路径:
https://github.com/jiyi666/apk-demo/tree/master/JNITest