jna在windows和linux下使用都很简单只要导入jna.jar就可以,maven中如下引入就可以了
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.5.0</version>
</dependency>
但是在android下要使用jna可就没这么简单了,因为jna.jar中没有android平台所需要动态库libjnidispatch.so,程序运行时会报如下的错误:
Caused by: java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-arm/libjnidispatch.so) not found in resource path (.)
打开jna-5.5.0.jar,的确在jar包中找不到com/sun/jna/android-arm/
这个文件夹
于是我在google上找了一些关于android下使用jna的文章,找到了解决方案:
jna项目的确没有把android平台的动态库libjnidispatch.so
打到jna.jar包(到少到目前最新的5.5.0版本都是如此,不明白为什么要这样)。但是它以附加jar包的形式额外提供了anndroid平台在不同硬件架构下的对应的动态库libjnidispatch.so
.我们可以根据自己的项目的平台下载这些这些额外的动态库,加到自己的android项目就解决问题了。
具体怎么做呢?
首先要找到android平台的动态库libjnidispatch.so
。
去jna仓库的dist文件夹(以5.5.0版本为例): https://github.com/java-native-access/jna/tree/5.5.0/dist
如果你访问github较慢,也可以使用国内码云的仓库镜像(https://gitee.com/mirrors/jna/tree/5.5.0/dist)
如下图找到对应的平台的jar包(本文以常用的armv7平台为例)。下载这个jar包
下载指定平台jar包(以armv7为例)解开jar包就可以看到libjnidispatch.so
就在里面:
把它复制到你的android studio项目如下位置
${YOU_PROJECT_FOLDER}\app\src\main\jniLibs\armeabi-v7a\libjnidispatch.so
就可以了