[JNI]开发之旅(5)访问c/c++函数
来源:互联网 发布:cdr软件的印刷排版 编辑:程序博客网 时间:2024/06/05 03:59
前面介绍了那么多,不在废话,直接实例开撸,不懂步骤的请看: [JNI]开发之旅(1)开发流程介绍
调用C++函数
1.调用c++函数printf,输出一个hello JNI
java层:
定义一个JNIUtils
class JNIUtils{ public native void printC(); static{ System.loadLibrary("native-lib"); }}
c++层:我这里使用android studio2.2直接生成函数,没有编写.h文件,为了方便阅读,请使用javah生成.h文件。
#include <jni.h>#include <string.h>#include <stdio.h>//调用c++printf函数extern "C"void Java_com_honjane_ndkdemo_JNIUtils_printC( JNIEnv* env, jobject jobj){ printf("JNI printf : hello JNI");}
在这个文件中实现了一个简单的Jni方法。该方法调用 c++中的printf()函数,输出 JNI printf : hello JNI
上面例子在是基于java项目才能看到输入,android项目看不到printf的输出。
2.下面通过调用c++字符串相关函数,回传到java层输出,来实现通过JNI调用c++函数实例介绍。
java层定义native方法
public native String stringFromJNI();
c++层:
jstring Java_com_honjane_ndkdemo_JNIUtils_stringFromJNI( JNIEnv* env, jobject jobjet) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str());}
先定义了一个字符串hello,然后调用c++函数c_str();最后转换成jni string返回给java层使用。
JNIUtils jniUtils = new JNIUtils();Log.i(TAG,jniUtils.stringFromJNI());结果:JNIUtils:Hello from C++
其中std::string表示std类下string类型,这种写法相当于java中类.变量/方法(Person.name),”::” 等同于 “. “,这样写可以免去定义命名空间using name space std ;而这个命名空间又相当于java中的import xxx.xxx.xxx,也就是导入包。
调用c++自定义函数
对上面例子进行改造,在c++层定义一个函数printHello
//自定义函数printHellojstring printHello(JNIEnv * env){ std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str());}extern "C"jstring Java_com_honjane_ndkdemo_JNIUtils_stringFromJNI( JNIEnv* env, jobject /* this */) { //std::string hello = "Hello from C++"; //调用自定义函数 jstring hello = printHello(env); return hello;}
输出结果:
JNIUtils:Hello from C++
java层访问c/c++函数简单介绍到这里。源码整理好后上传
源码:https://github.com/honjane/JNIDemo
0 0
- [JNI]开发之旅(5)访问c/c++函数
- [JNI]开发之旅(6)JNI函数中访问java类中对象的属性
- [JNI]开发之旅(9)JNI函数字符串处理
- Ndk学习之JNI构造函数(java-->C-->Java)
- JNI之C语言(四)-- 函数
- JNI(C访问Java方法)
- JNI开发系列之C语言
- C和C++ 访问 JNI 函数的方法比较
- JNI-Java访问C库
- Android开发之JNI调用本地C库专题(一):JNI的使用
- JNI/NDK开发指南(五)---C/C++访问Java实例方法和静态方法
- JNI/NDK开发指南(六)--C/C++访问Java实例变量和静态变量
- JNI之C初探
- cygwin+ndk+eclipse之JNI调用C函数
- C中的基本输入输出函数(Android之JNI)
- JNI之 c/c++调用java构造函数
- JNI之C代码访问java中的成员和java调C
- JNI之—— Eclipse配置C/C++开发环境
- 一个借用地点获得经纬度的百度地图程序
- 字符串和输入输出
- 欢迎使用CSDN-markdown编辑器
- Android自定义View:MeasureSpec的真正意义与View大小控制
- [置顶]如何手动安装MySql
- [JNI]开发之旅(5)访问c/c++函数
- Unity设计模式:享元模式
- 鼠标提示信息
- mac apache下面配置vhost
- Python pandas使用记录
- 计算多项式用直接算和秦九韶公式
- linux IPC 通信 study 四:POSIX消息队列
- 恭喜花姑娘论坛百度搜索“花姑娘”排名进入首页第五名!
- Java程序优化--如何更高效地使用字符串。