JNI 方法:形式参数列表的长度不同

JNI method: formal argument lists differ in length

我正在尝试修改一个从 java 层获取字符串参数的 JNI 函数。

最初,.java 文件中的 java 代码是:

callJNIMethod();

我正在尝试更改它以便我可以给它一个字符串,如下所示:

String arg = "abcd";
callJNIMethod(arg);

在我的 JNI 代码中,函数以前的样子是这样的:

JNIEXPORT jboolean JNICALL Java_com_file_app_Activity_callJNIMethod(
JNIEnv *env, jclass clazz){

//use the string
}

这是我将其更改为(在包装器 .cpp 文件和 header .h 文件中):

JNIEXPORT jboolean JNICALL Java_com_file_app_Activity_callJNIMethod(
JNIEnv *env, jclass clazz, jstring str);

我收到一条错误消息,指出方法 callJNIMethod 无法应用于给定类型。

required: no arguments
found: java.lang.String
reason: actual and formal argument lists differ in length
Note: Some input files use or override a deprecated API.

知道出了什么问题吗?

您在编辑.h 文件时误入歧途。对本机方法的更改应从您的 Java 来源开始。

.h 文件应该由 javah 从已编译的 .class 文件中生成。您可以将构建系统设置为在每次构建时重新 运行 javah。这样,如果本机方法实现不再与 Java 源中的本机声明相匹配,您将立即看到。