情况:我有一个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/

10-09 00:38