android下使用JNA

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

就可以了

参考资料

《Setting up JNA in Android Studio》
《Android开发如何使用JNA》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值