码迷,mamicode.com
首页 > 移动开发 > 详细

Android:JNA实践(附Demo)

时间:2019-06-12 23:09:47      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:str   jna   mamicode   dll   方法   结构   开发   导入   数据   

一、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)

标签:str   jna   mamicode   dll   方法   结构   开发   导入   数据   

原文地址:https://www.cnblogs.com/blogs-of-lxl/p/11013139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!