Android JNI和NDK学习(06)--JNI的数据类型

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

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

1 基本数据类型

Android JNI和NDK学习(06)--JNI的数据类型

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

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

2 引用类型

Android JNI和NDK学习(06)--JNI的数据类型

3 数组类型

Android JNI和NDK学习(06)--JNI的数据类型

4 Java虚拟机类型

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

Android JNI和NDK学习(06)--JNI的数据类型

说明:

(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编程中非常重要的一个结构体!

5JNINativeMethod 结构体

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);

关于JNI类型的更多内容,请参考“jni.h”文件或“JNI完全手册”。

更多相关文章

  1. Android学习心得(5) --- dex数据类型LEB128
  2. Android 手机运营商及网络类型判断
  3. Android Apk反编译函数对应法则
  4. Android之常见数据类型
  5. Android 的一些实用的函数
  6. android binder机制及其源码解析之第二节 重要函数讲解之常用数
  7. android Intent打开各种类型文件
  8. Android:BroadcastRecevicer广播类型汇总

随机推荐

  1. Android(安卓)NDK带来什么
  2. android 手机存储介质大全
  3. Android(安卓)软键盘弹出隐藏挤压界面等
  4. 如何实现android清理后台时,自己的软件不
  5. Android之Action Bar
  6. android layout属性
  7. Android(安卓)之 Retrofit 入门介绍
  8. Smalidea+IntelliJ IDEA/Android(安卓)St
  9. Android设置一个按钮右对齐
  10. Google Android(安卓)for Cars的整理Andr