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

时间:2015-06-24 23:27:12

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

我试图修改一个从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文件和标题.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.

知道什么是错的吗?

1 个答案:

答案 0 :(得分:1)

你通过编辑.h文件误入歧途。对本机方法的更改应该从Java源代码开始。

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