- 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