有关JNI层 与APP层的函数名对应问题
1)我到网上查了 JNINativeMethod 数据结构的解释,第一个变量name是Java中函数的名字, 在Led jni层的 demo中, 该数据结构定义如下:static JNINativeMethod method_table[] = {
{ "led_init", "()Z", (void*)Java_com_embedsky_led_LedActivity_ledInit },
{ "led_setOn", "(I)Z", (void*)Java_com_embedsky_led_LedActivity_ledSetOn },
{ "led_setOff", "(I)Z", (void*)Java_com_embedsky_led_LedActivity_ledSetOff },
{ "led_close", "()Z", (void*)Java_com_embedsky_led_LedActivity_ledClose },
};
2) APP层 定义的函数如下:
//初始化led
public static native boolean ledInit();
//关闭led
public static native boolean ledClose();
//点亮led
private static native boolean ledSetOn(int number);
//灭掉led
private static native boolean ledSetOff(int number);
3)led_init 变成了 ledInit, led_setOn 变成 ledSetOn, led_setOff变成 ledSetOff, led_close 变成ledClose。 这是怎么回事?
本帖最后由 TQ-lkp 于 2013-8-12 15:10 编辑
这个method_table是针对framework层调用的
我们目前使用的直接加载so的方式来做的,这个数组实际上没有起作用。
直接加载库,需要jni层的函数名字和应用层的包名一致如:
Java_com_embedsky_led_LedActivity_ledInit
对应上层的路径是 com/embedsky/led/LedActivity.java 的ledInit函数
页:
[1]