使用NDK進行JNI編程與實踐四:數組類傳參至C/C++的修改

  1. java中本地方法:
    向java的本地方法中傳入一個int型數組,在C/C++層將數組中的元素值各自 加10之後返回
    /* JNI返回數組arrys並將每個元素的值加10 */
    public native int[] intMathod(int[] arrys);
  1. 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;
}
  1. 測試代碼:
	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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章