我正在尝试改进从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.


知道有什么问题吗?

最佳答案

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

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

07-26 08:31