• Android JNI和NDK学习(07)JNI的常用API


    Android JNI和NDK学习(07)--JNI的常用API

    1 版本和类操作API

    2 对象域相关API

    2.1 GetFieldID

    jfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);

    函数作用:
      返回类的实例(非静态)域的域 ID。
    参数说明:
      env:JNI 接口指针。
      clazz:Java 类对象。
      name: 0 终结的 UTF-8 字符串中的域名。
      sig:0 终结的 UTF-8 字符串中的域签名。

    2.2 Set<type>Field

    void Set<type>Field(JNIEnv *env, jobject obj, jfieldID fieldID, NativeType value);

    函数作用:
      该访问器例程系列设置对象的实例(非静态)域的值。要访问的域由通过调用SetFieldID() 而得到的域 ID 指定。
    参数说明:  
      env:JNI 接口指针。
      obj:Java 对象(不能为 NULL)。
      fieldID:有效的域 ID。
      value:域的新值。

    <type>可以是Boolean、Char等类型,所有的Set<type>Field参考下面的函数:

    void (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject);
    void (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean);
    void (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte);
    void (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar);
    void (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort);
    void (*SetIntField)(JNIEnv*, jobject, jfieldID, jint);
    void (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong);
    void (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat);
    void (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble);

    2.3 Get<type>Field

    NativeType Get<type>Field(JNIEnv *env, jobject obj, jfieldID fieldID);

    函数作用:
      该访问器例程系列返回对象的实例(非静态)域的值。要访问的域由通过调用GetFieldID() 而得到的域 ID 指定。
    参数说明:
      env:JNI 接口指针。
      obj:Java 对象(不能为 NULL)。
      fieldID:有效的域 ID。

    <type>可以是Boolean、Char等类型,所有的Get<type>Field参考下面的函数

    jboolean (*GetBooleanField)(JNIEnv*, jobject, jfieldID);
    jbyte (*GetByteField)(JNIEnv*, jobject, jfieldID);
    jchar (*GetCharField)(JNIEnv*, jobject, jfieldID);
    jshort (*GetShortField)(JNIEnv*, jobject, jfieldID);
    jint (*GetIntField)(JNIEnv*, jobject, jfieldID);
    jlong (*GetLongField)(JNIEnv*, jobject, jfieldID);
    jfloat (*GetFloatField)(JNIEnv*, jobject, jfieldID);
    jdouble (*GetDoubleField)(JNIEnv*, jobject, jfieldID);

    3 字符串操作API

    4 数组常用API

    4.1 GetArrayLength

    jsize (*GetArrayLength)(JNIEnv*, jarray);

    函数作用:返回数组中的元素数。

    4.2 GetObjectArrayElement

    jobject (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize);

    函数作用:返回 Object 数组的元素。

    4.3 SetObjectArrayElement

    void (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject);

    函数作用:设置 Object 数组的元素。

    4.4 Get<PrimitiveType>ArrayRegion

    void Get<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array, jsize start, jsize len, NativeType *buf);

    函数作用:
      将基本类型数组某一区域复制到缓冲区中的一组函数。
    参数说明:
      env:JNI 接口指针。
      array:Java 指针。
      start:起始下标。
      len:要复制的元素数。
      buf:目的缓冲区。

    <PrimitiveType>可以是Boolean、Char等类型,所有的Get<PrimitiveType>ArrayRegion参考下面的函数:

    void (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray, jsize, jsize, jboolean*);
    void (*GetByteArrayRegion)(JNIEnv*, jbyteArray, jsize, jsize, jbyte*);
    void (*GetCharArrayRegion)(JNIEnv*, jcharArray, jsize, jsize, jchar*);
    void (*GetShortArrayRegion)(JNIEnv*, jshortArray, jsize, jsize, jshort*);
    void (*GetIntArrayRegion)(JNIEnv*, jintArray, jsize, jsize, jint*);
    void (*GetLongArrayRegion)(JNIEnv*, jlongArray, jsize, jsize, jlong*);
    void (*GetFloatArrayRegion)(JNIEnv*, jfloatArray, jsize, jsize, jfloat*);
    void (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray, jsize, jsize, jdouble*);

    4.5 Set<PrimitiveTyep>ArrayRegion

    void Set<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array, jsize start, jsize len, NativeType *buf);


    函数作用:
      将基本类型数组的某一区域从缓冲区中复制回来的一组函数。
    参数说明:
      Env:JNI 接口指针。
      array:
      Java 数组。
      start:起始下标。
      len:要复制的元素数。
      buf:源缓冲区。

    <PrimitiveType>可以是Boolean、Char等类型,所有的Set<PrimitiveType>ArrayRegion参考下面的函数:

    void (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray, jsize, jsize, const jboolean*);
    void (*SetByteArrayRegion)(JNIEnv*, jbyteArray, jsize, jsize, const jbyte*);
    void (*SetCharArrayRegion)(JNIEnv*, jcharArray, jsize, jsize, const jchar*);
    void (*SetShortArrayRegion)(JNIEnv*, jshortArray, jsize, jsize, const jshort*);
    void (*SetIntArrayRegion)(JNIEnv*, jintArray, jsize, jsize, const jint*);
    void (*SetLongArrayRegion)(JNIEnv*, jlongArray, jsize, jsize, const jlong*);
    void (*SetFloatArrayRegion)(JNIEnv*, jfloatArray, jsize, jsize, const jfloat*);
    void (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray, jsize, jsize, const jdouble*);

    更详细内容,请参考“JNI完全手册

  • 相关阅读:
    服务器安装宝塔面板
    CentOS7操作SSH/SSHD服务(查看/启动/重启/自启)
    CentOS服务器升级Linux版本
    阿里云云服务器漏洞修复
    Linux服务器安装Docker
    服务器安装Nginx
    服务器端简单Demo
    实现博客内容折叠
    [转]珍惜时间,做好规划——致大学过半的你们
    【LeetCode】9. 回文数
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3094051.html
Copyright © 2020-2023  润新知