android jni 实现
JNINativeMethod,定义如下:
typedef struct {
const char* name;
const char* signature;
void* fnPtr;
} JNINativeMethod;
第一个变量name是Java中函数的名字;第二个变量signature,用字符串是描述了函数的参数和返回值;第三个变量fnPtr是函数指针,指向C函数。其中比较难以理解的是第二个参数,例如
"()V"
"(II)V"
实际上这些字符是与函数的参数类型一一对应的。"()" 中的字符表示参数,后面的则代表返回值。例如"()V" 就表示void Func();"(II)V" 表示 void Func(int, int);
具体的每一个字符的对应关系如下:
字符 Java类型 C类型
V void void
Z jboolean boolean
I jint int
J jlong long
D jdouble double
F jfloat float
B jbyte byte
C jchar char
S jshort short
数组则以"["开始,用两个字符表示
[I jintArray int[]
[F jfloatArray float[]
[B jbyteArray byte[]
[C jcharArray char[]
[S jshortArray short[]
[D jdoubleArray double[]
[J jlongArray long[]
[Z jbooleanArray boolean[]
上面的都是基本类型。如果Java函数的参数是class,则以"L"开头,以";"结尾中间是用"/" 隔开的包及类名。
Ljava/lang/String; jstring
更多相关文章
- Android7.1 Presentation双屏异显 DEMO 样例
- android_5 修改一个textview中的字符串的颜色
- 关于 android 的JNI的java 调用 C和 C 调用JAVA(2)
- 展讯android LEDS模块分析----各种关系
- android 事件传递机制 【转】
- SurfaceTexture,TextureView,GLsurfaceview的区别与联系详解
- Android(java)回调函数经典示例
- android下libgdx 中文字符显示初探
- Android(安卓)登录密码RSA加密