著论准过秦,作赋拟子虚。这篇文章主要讲述Android JNI 学习:JNI 数据类型和数据结构相关的知识,希望能为你提供帮助。
本文我们来讨论一下JNI如何将java类型映射到本机C类型。
一、基本数据类型如下图表整理了Java基本类型和native对应的关系:
Java类型 | Native类型 | 描述 |
boolean | jboolean | unsigned 8 bits |
byte | jbyte | signed 8 bits |
char | jchar | unsigned 16 bits |
short | jshort | signed 16 bits |
int | jint | signed 32 bits |
long | jlong | signed 64 bits |
float | jfloat | 32 bits |
double | jdouble | 64 bits |
void | void | N/A |
【Android JNI 学习(JNI 数据类型和数据结构)】
二、引用类型JNI 包含许多与不同类型的Java对象相对应的引用类型。JNI引用类型按层次结构组织,如图所示:
文章图片
在C中,所有其他JNI引用类型都定义为与jobject相同。例如:
typedef jobject jclass;
在C ++中,JNI引入了一组虚拟类来强制执行子类型关系。例如:
class _jobject {}; class _jclass : public _jobject {}; ... typedef _jobject *jobject; typedef _jclass *jclass;
三、字段和方法ID方法和字段ID是常规C指针类型:
struct _jfieldID; /* opaque structure */ typedef struct _jfieldID *jfieldID; /* field IDs */ struct _jmethodID; /* opaque structure */ typedef struct _jmethodID *jmethodID; /* method IDs */
四、类型签名JNI 使用Java VM的类型签名表示。下图显示了这些类型的签名:
类型签名 | Java类型 |
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
L fully-qualified-class ; | fully-qualified-class |
[ type | type[] |
( arg-types ) ret-type | method type |
举个例子,Java方法:
long f (int n, String s, int[] arr);
对应的方法类型签名为:
(ILjava/lang/String; [I)J
推荐阅读
- Android-活动(Activity)Intent
- Android移动端自动化测试从入门到实战(Java篇)
- 学习Android过程中遇到的问题及解决方法——电话监听
- Android JNI 学习(JNI 设计概述)
- “今日校园” App 用户体验分析
- 将Xcode升级到10.0以上版本,Appium启动报错的问题
- RXAndroidBle 记录网址
- ”今日校园“App用户体验分析
- Android6.0 蓝牙通讯的实现