简单的 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