美文网首页
Java Native方法与Native函数绑定的方式

Java Native方法与Native函数绑定的方式

作者: 滑稽的命运 | 来源:发表于2020-04-22 16:48 被阅读0次
    • 静态绑定

      以打开串口的方法为例:

      • JIN


        JNI打开串口方法.jpg
      • Java


        JNI打开串口对应的Java方法.jpg
    • JNIEXPORT,强制Native函数可见。

    • jobject,表示方法返回类型为一个对象,如果不返回则为void

    • JNICALL,表示了函数的调用规范,比如参数入栈方式是从左往右,还是从右往左等。

    • Native函数中的以Java_开头后跟的com_pfg_mallstore_serialport与Java类包名对应,只是将.换成了_

    • Native函数中包名后紧跟类名,与Java方法所在类对应

    • Native函数参数

      • JNIEnv,指Java本地接口环境(Java Native Interface Environment),指向了本地方法的一个函数表。

      • jclass、jobject,jclass表示当前方法是静态方法,jobject表示当前方法是非静态方法。

      • jstring、jint...等,与Java中String、int类型一一对应。

    • 动态绑定

      • 动态绑定流程:

        1. 在Native层调用FindClass方法获取到需要绑定的Java类。

        2. 在Native层调用RegisterNatives 方法传入Java类、方法列表和绑定方法数量。

    • 动态绑定优点:
      • 可以在任意时刻触发。
      • 绑定之前根据静态规则查找Native函数。
      • 可以在绑定后的任意时刻取消。

    静态绑定和动态绑定对比

    静态绑定 动态绑定
    Native函数名 按照固有规则编写并采用C的命名规则 无要求
    Native函数可见性 可见 无要求
    动态更换
    调用性能 额外查找开销 无需查找
    开发影响 重构繁琐(例如:修改函数名,需两边同时改) 几乎无副作用
    AndroidStudio支持 自动关联Native函数跳转 不能自动关联

    相关文章

      网友评论

          本文标题:Java Native方法与Native函数绑定的方式

          本文链接:https://www.haomeiwen.com/subject/ethwihtx.html