我正在尝试改进从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源代码中的本机声明匹配。