动态注册native函数
来源:互联网 发布:js如何清空div的内容 编辑:程序博客网 时间:2024/05/24 07:23
Java JNI是一种静态注册native函数的方式。它的缺点是对每一个声明有native函数的java都需要生成.h,然后再做成链接库。相对繁琐。
其实java native函数和JNI函数的一一对应关系可以理解为函数和函数指针的关系,因此可以存在一种动态注册的方式注册函数。
Andoird 中使用了一种JNINativeMethod结构体还存放这种关联关系,即Andorid使用了一种Java 和 C 函数的映射表数组,并在其中描述了函数的参数和返回值。这个数组的类型是JNINativeMethod,定义如下:
typedef struct {
} JNINativeMethod;
第一个变量name是Java中函数的名字。
第二个变量signature,用字符串是描述了函数的参数和返回值
第三个变量fnPtr是函数指针,指向C函数。
其中比较难以理解的是第二个参数,例如
"()V"
"(II)V"
"(Ljava/lang/String;Ljava/lang/String;)V"
实际上这些字符是与函数的参数类型一一对应的。
"()" 中的字符表示参数,后面的则代表返回值。例如"()V" 就表示void Func();
"(II)V" 表示 void Func(int, int);
具体的每一个字符的对应关系如下
字符
V
Z
I
J
D
F
B
C
S
数组则以"["开始,用两个字符表示
[I
[F
[B
[C
[S
[D
[J
[Z
上面的都是基本类型。如果Java函数的参数是class,则以"L"开头,以";"结尾中间是用"/" 隔开的包及类名。而其对应的C函数名的参数则为jobject. 一个例外是String类,其对应的类为jstring
Ljava/lang/String;
Ljava/net/Socket;
如果JAVA函数位于一个嵌入类,则用$作为类名间的分隔符。
例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"
- 动态注册native函数
- Android JNI学习之动态注册native函数
- Android JNI学习笔记(二)-动态注册native函数
- Android JNI学习笔记(二)-动态注册native函数
- 动态注册jni函数
- JNI_onLoad 动态注册函数
- 注册native函数的两种方式
- Android平台的jni---注册native函数
- android 动态注册Jni函数
- JNI函数的动态注册
- Android 动态注册JNI函数
- Android 动态注册JNI函数
- 安卓 jni 开发之 native 方法的动态注册
- JNI动态注册native方法及JNI数据使用
- Android NDK系列(6) — 动态注册native方法
- Android Studio Jni开发(三)Native方法动态注册
- Android Studio3.0开发JNI流程------JNI静态注册和动态注册(多个类的native动态注册-经典篇)
- 深入了解android平台的jni---注册native函数
- 【VB.NET】为什么叫VB.NET
- struts2的拦截器
- Qt国际化——多语言翻译时值得注意的一个编程问题
- [nginx]centos6.5下nginx-1.6.2的安装,与tomcat简单整合
- HDOJ 1017 A Mathematical Curiosity
- 动态注册native函数
- HDU 1990 & ZOJ 2992 Monkey Vines(数学啊)
- Hadoop数据类型
- 如何在Visual Studio中调试.NET源码
- 网络基本功(二十三):Wireshark抓包实例诊断TCP连接问题
- java连接access数据库说明以及示例代码
- 工业4.0:中国需要补课么?
- printf 一些使用细节
- UI自动化测试介绍