美文网首页
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