情况:我有一个JNI文件库,该库由该JNI库中主头文件(即code1.h)调用的几个函数组成。我有一个要与JNI头文件(code1.h)相互传递的Java文件(即code2.java)。我为名为(code1.c)的(code1.h)创建了源代码。
我的问题是:(code1.h),(code1.c)和(code2.java)是否必须与JNI和Java之间的通信使用相同的名称?
编辑:所以(code1.h),(code1.c)和(code1.java)都必须具有相同的名称,以便(code1.java)将字符串传递到(code1.c)/( code1.h)?并且不可能使(code2.java)与(code1.c)/(code1.h)之间传递字符串,因为它们的名称不同,这是正确的吗?
例如,
public class code1 { /*this is code2.java, but should the name be changed to (code1.java) to match that of the JNI?*/
static {
System.loadLibrary("myjni");
}
将字符串传递给code1.h / code1.c
它将使用Linux Debian“ Wheezy”和Eclipse与Android SDK和NDK为android编译
最佳答案
Java需要在编译单元名称(SomeClass.java
是名称,public class SomeClass{
是声明)之间进行匹配,但是C不需要此名称。
只要函数名称/导出的符号名称与Java端本机方法的名称匹配,就可以根据需要命名C源文件和头文件。例如:
//JavaClass.java
public class JavaClass{
public native String getAString(String in);
}
标头将是:
// any name
JNIEXPORT jstring JNICALL
Java_JavaClass_getAString(JNIEnv *, jobject, jstring);
与匹配的C文件。您可以为所有Java命名将此标题命名为
catsMakeTheWorldGoRound.h
。关于java - 传递字符串时,JNI和Java命名约定是否重要,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20414316/