如何在android上支持JNA 知识准备

JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架.

    相比于jni,jna的优势有如下两点:

    1)使用方便,如果有一个现有的.dll/.so文件,如果使用JNI技术调用,我们首先需要另外使用C语言写一个.dll/.so共享库,使用SUN规定的数据结构替代C语言的数据结构,调用已有的 dll/so中公布的函数。

JNA中,它提供了一个动态的C语言编写的转发器,不需要再编写适配用的.dll/.so,只需要在Java中编写一个接口和一些代码,作为.dll/.so的代理,就可以在Java程序中调用dll/so。

    2)比较好地处理不同语言之间数据类型不一致造成的问题,减轻了上层开发者的负担。

 

但是JNA毕竟是为上层开发者考虑的,注意它是一个“Java框架”,它有两大缺点为下层开发者不满:

 1)使用JNA技术比使用JNI技术调用动态链接库会有些微的性能损失。可能速度会降低几倍,这对桌面系统无所谓, 可对于本身资源紧张的嵌入式系统,尤其是要求实时性高的通讯类应用(一般协议层都是C架构的)可能就是致命缺陷。

 2)使用JNI技术,不仅可以实现Java访问C函数,也可以实现C语言调用Java代码。

而JNA只能实现Java访问C函数,作为一个Java框架,自然不能实现C语言调用Java代码。此时,你还是需要使用JNI技术。
归根结底,JNI是JNA的基础。是Java和C互操作的技术基础。

众所周知,android支持JNI,而不支持更高级的JNA,同样是开源项目,内中原因可能是google也没想到会有把桌面系统产品直接移植到嵌入式上的需求吧,当然效率和思想也是肯定的原因。
如果我们有在android上使用jna的需求怎么办?请继续关注<二>实战步骤。

转载请注明出处和作者,谢谢。

你可能感兴趣的:(如何在android上支持JNA 知识准备)