關於jni中預設方法引數的解釋
阿新 • • 發佈:2019-01-27
包含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等等。