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


    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 基本数据类型

    为了使用方便,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);

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

  • 相关阅读:
    pandas 移动列的方法
    D-Link 路由器新漏洞,黑客可远程执行任意命令
    世界第一黑客:未来云安全的威胁
    黑客针对参与Covid-19疫苗分发的公司
    iPhone为盲人自动识别并标记按钮和UI功能
    小心!基于UEFI引导的病毒,重装系统也清除不了
    美国禁用面部识别技术,到底是什么原因?
    Apple的双向无线充电器现已上市,预计最快在本周发货
    警惕黑客通过打印机侵入你的系统
    为什么未来没有密码?黑客还能破解吗?网友:同样危险
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3094037.html
Copyright © 2020-2023  润新知