1. 程式人生 > >關於jni中預設方法引數的解釋

關於jni中預設方法引數的解釋

包含jni的專案中,一般都建立一個native方法,這個方法的建立會影響在使用javah編譯成的.h檔案例如:

我在MainActivity中建立了native方法,傳遞一個int陣列:

那麼會在.h檔案中出現對應的內容:

JNIEXPORT void JNICALL Java_com_array_MainActivity_changeArray
  (JNIEnv * env, jobject obj, jintArray jarrays);
三個引數JNIEnv *, jobject, jintArray含義:

引數1:在jni.h檔案中,可以發現有這樣的一行:(我的是在149行,可以Ctrl+f查詢JNIEnv)

struct _JNIEnv;
這裡聲明瞭一個結構 為tJNIEnv;

在這裡又聲明瞭一個型別:

typedef _JNIEnv JNIEnv;
這時我們就明白了,第一個引數可以幫我們拿到一個指標,通過該指標可以找到jni.h檔案中的各種方法,方便java和C的互動。

引數2:obj代表執行此JNI操作的類例項引用,就是哪一個類呼叫了jni,obj就代表這個類例項化之後的引用。

引數3:你自己想傳遞的引數,以上是我傳遞了一個int型別的陣列,當然你也可以傳遞其他資料,但是你需要注意java和C資料型別的轉換,例如char C中為 1byte但在java中  為2byte,C沒有String等等。