简单的 JNI 调用不起作用
Simple JNI call not working
在我的 C++ 方面,我有:
extern "C" {
JNIEXPORT void JNICALL test(JNIEnv*, jobject){}
}
我的 Activity 有一个已声明的方法:
public native void test();
然而,当我调用测试时,我得到了找不到本机方法的错误。有什么问题吗?
JNI 未在寻找函数 test
。它查找的名称的格式为 Java_packagename_classname_functionname
。例如,如果您的 class 是
package your.package;
public class Activity {
static {
System.loadLibrary("your_library");
}
public native void test();
}
然后你的库必须包含一个函数
extern "C" JNIEXPORT void JNICALL Java_your_package_Activity_test(JNIEnv *, jobject) { }
...假设 test
没有超载。如果 test
过载,请使用 javah
程序为您生成一个 header,因为您不想手动执行此操作。
javah your.package.Activity
将生成一个文件 your_package_Activity.h
,其中包含您需要的函数签名。请注意,这需要编译 Activity
class,即 class 路径中必须有一个文件 your/package/Activity.class
。
在我的 C++ 方面,我有:
extern "C" {
JNIEXPORT void JNICALL test(JNIEnv*, jobject){}
}
我的 Activity 有一个已声明的方法:
public native void test();
然而,当我调用测试时,我得到了找不到本机方法的错误。有什么问题吗?
JNI 未在寻找函数 test
。它查找的名称的格式为 Java_packagename_classname_functionname
。例如,如果您的 class 是
package your.package;
public class Activity {
static {
System.loadLibrary("your_library");
}
public native void test();
}
然后你的库必须包含一个函数
extern "C" JNIEXPORT void JNICALL Java_your_package_Activity_test(JNIEnv *, jobject) { }
...假设 test
没有超载。如果 test
过载,请使用 javah
程序为您生成一个 header,因为您不想手动执行此操作。
javah your.package.Activity
将生成一个文件 your_package_Activity.h
,其中包含您需要的函数签名。请注意,这需要编译 Activity
class,即 class 路径中必须有一个文件 your/package/Activity.class
。