今天编程的时候遇到,
java类中的本地函数声明是:
private native static int open_device(String path);
而在生成的头文件中确实这样的:
JNIEXPORT jint JNICALL Java_com_coban_a83tled_A83TLed_open_1device(JNIEnv *, jclass, jstring);明显在方法名中多了一个1;
然后我把函数名声明称这样:
private native static int open(String path);
而生成的头文件中是这样的:
JNIEXPORT jint JNICALL Java_com_coban_a83tled_A83TLed_open (JNIEnv *, jclass, jstring);很明显这样没有1;
然后我把函数名声明称这样:
private native static int open_led_device(String path);
而生成的头文件中是这样的:
JNIEXPORT jint JNICALL Java_com_coban_a83tled_A83TLed_open_1led_1device (JNIEnv *, jclass, jstring);很明显多了俩1
通过这样可以看出来,和函数声明中的下划杠“_”有关。经过查资料,因为jni把C函数名映射成java方法名的时候是com_mypackage_myclass_mymethod();com.mypackage.myclass.mymethod();也就是说jni是依靠下划杠'_'来间隔包、类、方法的,但是如果你的方法名中有'_'字符的话,jni必须能够区分方法名中的'_'字符还是间隔符,所以用加一个1后缀的方式来区分。
所以声明的时候还是要注意点,不过不影响我们使用。
借鉴了:
http://www.01yun.com/other/20160308/658170.html
http://www.myexception.cn/j2se/681720.html
在这里表示感谢。