关于JNI

来源:互联网 发布:网络名字伤感两个字 编辑:程序博客网 时间:2024/06/07 05:24

我们在activity中声明了一个native方法,

static {        System.loadLibrary("native-lib");    }public native String stringFromJNI();

在native-lib.cpp的源文件中

#include <jni.h>#include <string>extern "C"//JNIEXPORT jstring JNICALL起一个链接作用,固定写法,jstirng是一个返回类型,JNIEXPORT jstring JNICALLJava_com_great_1xiaohaihai_myffmpeg_MainActivity_stringFromJNI(        JNIEnv *env,        jobject) {        //标准模板库(STL)提供了一个std::string类,其是std::basic_string的一个特化,并支持比较、连接、遍历、STL算法、复制、赋值等等操作,这个类定义在<string>头文件中。#include <string> //注意这里不是string.h string.h是C字符串头文件      //C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),c_str()返回一个以‘’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string或 字符数组内。    std::string hello = "Hello from C++";    return env->NewStringUTF(hello.c_str());}

当把动态库加载进DVM的时候,通过JNIEnv *指针去查找Java Native方法对应的JNI方法

我们知道Java的数据类型是跟C/C++的数据类型是不一样的,而JNI是处于Java和Native本地库(大部分是用C/C++写的)中间的一层,JNI对于两种不同的数据类型之间必须做一种转换,所以在JNI跟Java之间就会有数据类型的对应关系。 在JNI中,提供了以下各种数据类型,可以分为原生类型和引用类型: 其与java端的数据类型对应如下表: java    jnichar    jcharbyte    jbyteshort   jshortint     jintlong    jlongfloat   jfloatdouble  jdoubleboolean jboolean
原创粉丝点击