Android:JNA实践(附Demo)

Posted blogs-of-lxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:JNA实践(附Demo)相关的知识,希望对你有一定的参考价值。

一、JNA和JNI的对比

  1.JNI的调用流程
  android应用开发中要实现Java和C,C++层交互时,想必首先想到的是JNI,但是JNI的使用过程十分繁琐,需要自己再封装一层JNI接口进行转换(使用SUN规定的数据结构去替代C语言的数据结构),包名、函数名等都要匹配,难以阅读和更新。
  如下图是通过JNI实现Java调用C层的方法流程:
  技术图片

  2.什么是JNA?与JNI有什么差异?

  JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C、C++代码,尤其是底层库文件(windows中叫dll文件,linux下是so【shared object】文件)。JNA简化了Java调用原生函数的过程,原理是提供了一个动态的C语言编写的转发器(实际上也是一个动态链接库,在Linux-i386中文件名是:libjnidispatch.so)可以自动实现Java与C之间的数据类型映射。
  相比JNI,JNA只需要导入一个.jar+一个.so,然后就可以在Java中直接申明so中公开的函数并进行调用,十分方便。而JNA有两个小缺点:(1)性能上会比通过JNI调用动态链接库要稍低,但总体影响不大,因为JNA也避免了JNI的一些平台配置的开销。(2)因为JNA调用是直接在Java层实现,所以反过来C层无法直接调用Java层方法,但是Java层可以把方法传到c层进行回调。
 
  技术图片

 

 二、JNA实践
 
  1.相关 jna.jar包和libjnidispatch.so库文件下载
  
 
 
 

以上是关于Android:JNA实践(附Demo)的主要内容,如果未能解决你的问题,请参考以下文章

winserver的consul部署实践与.net core客户端使用(附demo源码)

开源分享:谷歌大佬联合打造《高级Kotlin强化实战(附Demo)》

winserver的consul部署实践与.net core客户端使用(附demo源码)

winserver的consul部署实践与.net core客户端使用(附demo源码)

Android插件化资源的使用及动态加载 附demo

Android MediaPlayer+SurfaceView播放视频(附Demo)