JNI 是 Java Native Interface 的缩写,用以解决 Java 对本地方法的操作问题,而本地方法是以库文件的形式存放的(.dll for windows,.so for Unix)。
分享一些常见的jni方法:
GetStringUTFChars 将jstring转换成为UTF-8格式的char*
GetStringChars 将jstring转换成为Unicode格式的char*
ReleaseStringUTFChars 释放指向UTF-8格式的char*的指针
ReleaseStringChars 释放指向Unicode格式的char*的指针
NewStringUTF 用 char* 创建一个UTF-8格式的 jstring 对象
NewString 用char*创建一个Unicode 格式的 jstring对象
GetStringUTFLengt 获取UTF-8格式的char*的长度
GetStringLength 获取Unicode格式的char*的长度
在JNI中可以通过c语言调用java函数
在JNI里使用java类的某些方法,分为以下几个步骤:
1. 查找该类:
jclass xxx = (*env)->FindClass(env, "Lclass_name;");
2. 查找该类的初始化方法:
jmethodID xxx = (*env)->GetMethodID(env, jclass, "<init>", "(M)N");
3. 查找需要调用的该类的方法:
jmethodID xxx = (*env)->GetMethodID(env, jclass, "(M)N" );
4. 初始化该类的实例:
jobject xxx = (*env)->NewObject(env, jclass, jmethodID );
5. 调用实例的某方法:
(*env)->CallObjectMethod(env, jclass, jmethodID, [parameter1, parameter2,...] );
6. 释放实例:
(*env)->DeleteLocalRef(env, xxx);
需要说明的有两点:
1.调用的java函数分为静态方法和非静态方法,返回的参数有java独有的类型或者c中存在的类型
如java方法为静态方法则调用函数应为CallStaticXXXMethod(xxx为返回类型,可以为Void,Int,Char或者java类型的object)
2."(M)N"是该函数的输入和输出参数的类型签名(Type Signature)。 这里,JNI中对于以下类型定义了类型签名:
Type Signature Java Type
Z boolean
B byte
C char
S short
I int
J long
F float
D double
另外[加类型名表示该类型的数组,L加类名表示参数是java类,如Ljava/lang/Object;(注意“;”是必须的,否则机器不识别)
分享到:
相关推荐
android JNI 学习笔记 android JNI 学习笔记.doc
JNI学习笔记,对学习android帮助极大
JNI学习笔记.doc
针对所有初学JNI的人员的一个最全面的笔记,对于有过基础的朋友来说又是一个更好的助手. 省去了你自己去总结的时间,有更多的时间去敲代码. ------------黑马程序员学员-------------------
做为Android JNI还未入门的同志们,我这个总结的文档对你们真的很有用处,几乎大部分常规的Java访问C/C++以及C/C++访问Java的内容都包含在内。
1.C++与java交互基本介绍 2.C++获取java属性值、设置java属性值 3.C++创建java对象 4.C++中数据类型间的转换
集成ndk,一个简单的Jni工程包括个人学习笔记
JNI的学习笔记,多看看,很久没看就忘记了.
项目四 多线程文件下载 25 项目五 Android自定义树形菜单 26 项目六 高仿微信聊天 26 ...学习四 Android and MCU Communication 43 一、 uses USB via FTDI serial card 43 二、 uses Uart(through JNI) 44
本人从网上收集的一些关于JNI学习的资源,呵呵
JNI与Java方法的相互调用学习笔记代码。可以新建一个项目,把其中的c++代码拷贝到native-lib.cpp文件中,修改jni中的方法名即可
jni_demo学习样例,带有文档以及笔记
java 调用DLL 学习笔记,包括 JNI、 JACOB 及JAWIN。 及 dll 查看工具
基于seetaface的人脸识别,本人修改为安卓NDK编译程序,并扩展了,安卓调用接口,包括了检测,对齐,识别,在同一个程序中...本人笔记网址www.abdosoft.cn, 至少可以让你节省1个星期时间,包括jni学习也是很好的参考了。
JNI 编程教程,新手必备 Android JNI/NDK 学习笔记
NULL 博文链接:https://cherishlc.iteye.com/blog/1756762