解决 JNA 本机库兼容性和 32 位/64 位库问题的完整指南

本文将介绍如何解决JNA兼容性问题,在 Android 开发中,使用 JNA库可以轻松调用本机代码,无需编写 JNI代码。会遇到本机库兼容性问题,尤其是在不同版本的 JNA 库之间以及 32 位/64 位库的冲突。



问题描述

我遇到了两个主要问题:

  1. JNA 库版本不兼容

    java.lang.Error: 
    There is an incompatible JNA native library installed on this system
    Expected: 6.1.0
    Found:    7.0.0
    
  2. 32 位和 64 位库的冲突

    java.lang.UnsatisfiedLinkError: Unable to load library 'dmtskf':
    dlopen failed: ... is 32-bit instead of 64-bit
    

解决方案步骤

步骤 1: 下载和配置正确版本的 JNA 库

确保使用的 JNA 库版本与预期一致。可以从 git hub 仓库下载 JNA 6.1.0 库。
在这里插入图片描述

JNA 6.1.0 下载页面

下载 jna-5.9.0\jna-5.9.0\dist\android-aarch64.jar 改.zip 并解压出libjnidispatch.so并将其添加到项目的libs\arm64-v8a中。

build.gradle 文件中添加下载的 JNA 依赖

步骤 2: 确认 JNI 库文件的位置

确保 libjnidispatch.so 文件存在于 src/main/jniLibs 目录下,并且架构目录结构正确:

app/
        └── libs/
            ├── arm64-v8a/
            │   └── libjnidispatch.so
            ├── armeabi-v7a/
            │   └── libjnidispatch.so
            ├── armeabi/
            │   └── libjnidispatch.so
            └── x86/
                └── libjnidispatch.so

步骤 3: 解决 32 位和 64 位库冲突

确保所有本机库文件与目标设备的架构匹配。如果在 64 位设备上运行应用程序,请确保所有库都是 64 位的。以下是确保 64 位库的方法:

  1. 确认库文件架构
    确保 src/libs/arm64-v8a/ 目录下包含 64 位版本的 libdmtskf.so 文件。

  2. 更新 build.gradle 文件
    确保 abiFilters 包含 64 位架构:

    defaultConfig {
        applicationId "com.xxx.dmt_skf_api"
        minSdk 24
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        ndk {
            //设置支持的SO库架构
            // abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
        }
        ndkVersion "21.4.7075529"
    }

通过这些步骤,你应该能够解决 JNA 库版本不兼容和 32 位/64 位库冲突的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一歲抬頭

点赞1元,收藏免费,打赏随意。

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

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

打赏作者

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

抵扣说明:

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

余额充值