简单的JNI呼叫无法正常工作

时间:2015-01-30 11:26:30

标签: java android c++ java-native-interface

在我的C ++方面,我有:

extern "C" {
      JNIEXPORT void JNICALL test(JNIEnv*, jobject){}
}

我的活动有一个声明的方法:

public native void test();

然而,当我调用测试时,我得到错误本机方法未找到。有什么问题?

1 个答案:

答案 0 :(得分:1)

JNI不寻找函数test。它寻找的名称是Java_packagename_classname_functionname形式。例如,如果您的班级是

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程序为您生成标题,因为您不想手动执行此操作。

javah your.package.Activity

将生成一个文件your_package_Activity.h,其中包含您需要的功能签名。请注意,这需要编译Activity类,即类路径中必须有文件your/package/Activity.class