我试图修改一个从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.
知道什么是错的吗?
答案 0 :(得分:1)
你通过编辑.h文件误入歧途。对本机方法的更改应该从Java源代码开始。
.h文件应由javah
从已编译的.class文件生成。您可以设置构建系统,以便在每次构建时重新运行javah
。这样,如果本机方法实现不再与Java源代码中的本机声明匹配,您将立即看到。