如何通過 JNI 介面呼叫本機庫中的函式
在 Java 本地介面 (JNI)允許你從 Java 程式碼,反之亦然呼叫本機的功能。此示例顯示如何通過 JNI 載入和呼叫本機函式,它不會使用 JNI 函式從本機程式碼訪問 Java 方法和欄位。
假設你在 project/libs/<architecture>
資料夾中有一個名為 libjniexample.so
的本地庫,你想從 com.example.jniexample
包中的 JNITest
Java 類呼叫一個函式。
在 JNITest 類中,宣告如下函式:
public native int testJNIfunction(int a, int b);
在你的本機程式碼中,定義如下函式:
#include <jni.h>
JNIEXPORT jint JNICALL Java_com_example_jniexample_JNITest_testJNIfunction(JNIEnv *pEnv, jobject thiz, jint a, jint b)
{
return a + b;
}
pEnv
引數是一個指向 JNI 環境的指標,你可以將其傳遞給 JNI 函式以訪問 Java 物件和類的方法和欄位。thiz
指標是對呼叫本機方法的 Java 物件的 jobject
引用(如果它是靜態方法,則為類)。
在你的 Java 程式碼中,在 JNITest
中,像這樣載入庫:
static{
System.loadLibrary("jniexample");
}
注意開頭的 lib
,省略檔名末尾的 .so
。
從 Java 呼叫本機函式,如下所示:
JNITest test = new JNITest();
int c = test.testJNIfunction(3, 4);