三嗔 发表于 2013-8-12 14:46:30

有关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:08:38

本帖最后由 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]
查看完整版本: 有关JNI层 与APP层的函数名对应问题