在JNI中調用Java方法需要以下步驟:
MyClass
的Java類,其中包含一個名為myMethod
的靜態方法:public class MyClass {
public static void myMethod() {
System.out.println("Hello from Java method!");
}
}
將Java類編譯為字節碼文件(.class)。
生成JNI頭文件。可以使用javah
命令生成JNI頭文件,例如:
javah -jni MyClass
這將生成一個名為MyClass.h
的頭文件。
JNIEnv
指針調用Java方法。例如在C++代碼中調用myMethod
方法:#include <jni.h>
#include "MyClass.h"
JNIEXPORT void JNICALL Java_MyClass_myMethod(JNIEnv *env, jobject obj) {
// 在此處調用Java方法
jclass cls = env->GetObjectClass(obj);
jmethodID mid = env->GetStaticMethodID(cls, "myMethod", "()V");
env->CallStaticVoidMethod(cls, mid);
}
將C/C++代碼編譯為動態鏈接庫(.so文件)。
在Java代碼中加載動態鏈接庫,并調用JNI方法。例如,在Main.java中加載動態鏈接庫并調用myMethod
方法:
public class Main {
static {
System.loadLibrary("mylib"); // 加載動態鏈接庫
}
public static void main(String[] args) {
MyClass.myMethod(); // 調用JNI方法
}
}
以上步驟是調用靜態方法的示例。如果要調用實例方法,可以將JNI方法的第二個參數更改為jobject
,并在調用Java方法之前獲取實例對象的jclass
和jmethodID
。