JNI开发基础(一)

来源:互联网 发布:百度网盘下载助手mac 编辑:程序博客网 时间:2024/05/22 17:31

JNI,全称是Java Native Interface。
Java调用C/C++,C/C++调用Java的一套API。

其原理大致如下:

这里写图片描述

在Android中,C/C++生成so文件与Android进行交互,在windows程序当中,C/C++生成dll文件与Java文件进行交互。JNI不是Android所特有的。

每个native函数,都至少有两个参数(JNIEnv*,jclass或者jobject)

JNIEnv一般是结构体指针,代表Java运行环境,调用Java中的代码。具体在C中,JNIEnv代表结构体的别名,env是二级指针;在C++中,JNIEnv是结构体的别名,env是一级指针。1)当native方法为静态方法时:    jclass 代表native方法所属类的class对象(MainActivity.class)2)当native方法为非静态方法时:    jobject 代表native方法所属的对象

基本数据类型

    Java类型->JNI类型->C/C++类型    Java基本数据类型与JNI数据类型的映射关系为:    boolean       jboolean    byte          jbyte;    char          jchar;    short         jshort;    int           jint;    long          jlong;    float         jfloat;    double        jdouble;    void          void应用类型(对象)String                 jstringobject                 jobject数组,基本数据类型的数组byte[]                 jByteArray对象数组object[](String[])     jobjectArray

C++访问Java的属性

在MainActivity中:
这里写图片描述

在C++里代码如下:
这里写图片描述

在控制台打印结果为:
这里写图片描述
成功的在C++代码中修改Java的值

C++访问Java静态属性

实例代码如下:
这里写图片描述

这里写图片描述

访问方法与访问属性也类似,这里就不详细展开了。

对于上面不同的数据类型,不同的签名如下:
这里写图片描述

0 0
原创粉丝点击