天嵌 ARM开发社区

 找回密码
 注册
查看: 1590|回复: 1

有关JNI层 与APP层的函数名对应问题

[复制链接]
三嗔 发表于 2013-8-12 14:46:30 | 显示全部楼层 |阅读模式
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函数

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-18 11:37 , Processed in 1.015625 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表