本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3094037.html

本文介绍JNI的数据类型。NDK中关于JNI数据类型的定义都在jni.h中,大家可以参考jni.h。jni.h在ndk中的路径参考:

android-ndk-r7b/platforms/android-/arch-arm/usr/include/jni.h

1 基本数据类型

为了使用方便,JNI还提供了以下定义:

#define JNI_FALSE 0
#define JNI_TRUE 1 typedef jint jsize;

2 引用类型

3 数组类型

4 Java虚拟机类型

将JNI注册到Java时,会首先注册到Java虚拟机。Java虚拟机的类型如下表:

说明:

(01) L fully-qualified-call;

示例:"Ljava/lang/String;",它在Java虚拟机中表示“Java中的java.lang.String”对应的类型。

注意:fully-qualified-call必须对应完整的java路径,且用“/”分格。

(02) [ type

示例:"[I",表示int[]类型的数组。

(03) (arg-types) return-type

示例:"(Ljava/lang/String;)I",表示参数是string类型,返回值是int类型。

理解上面这些基本类型之后,我们再来介绍“JNINativeMethod 结构体”。这是JNI编程中非常重要的一个结构体!

5 JNINativeMethod 结构体

5.1 JNINativeMethod定义

typedef struct {  

    const char* name;
const char* signature;
void* fnPtr;
} JNINativeMethod;

name:Java中函数的名字。
signature:Java中函数的参数和返回值。一般的形式是"(arg-types)return-type":arg-types对应是参数类型,空白表示没有参数;return-type是返回值类型,不能是空白,若返回void,则应该设置return-type为V。
fnPtr:指向native函数的函数名称。前面都要接 (void *)

5.2 JNINativiMethod的示例

// Java和JNI函数的绑定表
static JNINativeMethod method_table[] = {
{ "stringFromJni" , "()Ljava/lang/String;" , (void*)stringFromJni },
{ "stringToJni" , "(Ljava/lang/String;)V" , (void*)stringToJni },
};

stringFromJni、stringToJni在Java和JNI中的声明分明如下:

// stringToJni对应在Java中的声明
private native String stringFromJni();
// stringToJni对应在JNI中的声明
JNIEXPORT jstring JNICALL stringFromJni(JNIEnv *env, jobject clazz); // stringToJni对应在Java中的声明
private native void stringToJni(String val);
// stringToJni对应在JNI中的声明
JNIEXPORT void JNICALL stringToJni(JNIEnv *env, jobject clazz, jstring val);

最新文章

  1. strlcpy和strlcat
  2. ubuntu10.04.4下安装JDK
  3. hdu 4635 Strongly connected 强连通缩点
  4. L009-oldboy-mysql-dba-lesson09
  5. SpotLight的下载地址以及注册码可供参考
  6. tomcat可以访问到软链接设置
  7. jsp中添加弹窗口并且实现向后台双向传递数据
  8. mysql table is marked as crashed and last (automatic?) repair failed
  9. iOS动画特效
  10. python 语句:条件、循环、break、continue...
  11. webpack模块解析
  12. redis学习资料
  13. IOS 选择会员资格
  14. MySQL之记录相关操作
  15. hue的历史查询记录querys乱码问题解决
  16. CString中 format、trimLeft和trimright、trim 和FindOneOf用法
  17. mongodb初步使用体验
  18. 共识算法之POW
  19. SQLSERVER 创建对Oracle数据库的DBlink以及查询使用
  20. kali linux升级

热门文章

  1. 用python 将 pymysql操作封装成类
  2. Linux下使用expect实现跳板机自动跳转/免密登录/自动登录(转)
  3. 常用 ARM 指令集及汇编
  4. 【JSP EL】el表达式判断是否为null
  5. fl2440hello world模块驱动编写
  6. JS使用cookie实现DIV提示框只显示一次的方法
  7. 【日志处理、监控ELK、Kafka、Flume等相关资料】
  8. 数据挖掘算法之聚类分析(二)canopy算法
  9. Codeforces 553B Kyoya and Permutation
  10. 爪哇国新游记之十九----使用Stack检查数字表达式中括号的匹配性