【问题标题】:Android JNA UnsatisfiedLinkError: Native library (com/sun/jna/xxx/libjnidispatch.so) not foundAndroid JNA UnsatisfiedLinkError:找不到本机库(com/sun/jna/xxx/libjnidispatch.so)
【发布时间】:2021-09-20 14:15:44
【问题描述】:

嘿,我正在尝试使用 JNA 和 libvirt java 绑定设置一个 android studio 项目。

这是目前项目结构的样子。

但是该解决方案对我不起作用

目前正在测试该模拟器,但尚未导入 arm 二进制文件。

当尝试在 libvirt java 绑定中使用 Connect 方法时,出现此错误。

有一个很相似的帖子here

11-18 23:54:37.584 4182-4182/com.local.test E/AndroidRuntime: FATAL EXCEPTION: main
                                                           Process: com.local.test, PID: 4182
                                                           java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-x86/libjnidispatch.so) not found in resource path (.)
                                                               at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1039)
                                                               at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:999)
                                                               at com.sun.jna.Native.<clinit>(Native.java:191)
                                                               at com.sun.jna.Native.loadLibrary(Native.java:625)
                                                               at org.libvirt.jna.Libvirt.<clinit>(Unknown Source)
                                                               at org.libvirt.Library.<clinit>(Unknown Source)
                                                               at org.libvirt.Connect.<init>(Unknown Source)
                                                               at com.local.haris.MainActivity.onCreate(MainActivity.java:34)
                                                               at android.app.Activity.performCreate(Activity.java:6662)
                                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                               at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                               at android.os.Looper.loop(Looper.java:154)
                                                               at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

注意事项: 安卓工作室 3.0 没有安装 c++ SDK(不认为我需要,因为我没有编译二进制文件) 如果不确定 libvirt java jar 是否适用于 android。我试图找到有关此的信息,但没有做到。如果有人可以对此发表评论,将不胜感激。

【问题讨论】:

  • 您的目标是具有 x86 平台还是基于 ARM 平台的 Android 设备?

标签: android jna libvirt


【解决方案1】:

为您的项目支持的所有 Android ABI 包含 libjnidispatch.so 共享库。

  • 导航到JNA libraries
  • 在版本 4.5.0 下,下载 zip 存档
  • 解压缩包,导航到jna-4.5.0/dist/目录。 libjnidispatch.so 可以从各自的 jar 文件中提取不同的 ABI。映射如下表所示。

    | JNA ABI             | Android ABI   |
    | ------------------- | ------------- |
    | android-aarch64.jar | arm64-v8a     |
    | android-armv7.jar   | armeabi-v7a   |
    | android-x86-64.jar  | x86_64        |
    | android-x86.jar     | x86           |
    
  • libjnidispatch.so放入映射的Android ABI文件夹中,例如arm64-v8aarmeabi-v7ax86x86_64

【讨论】:

    【解决方案2】:

    虽然自问题出现以来已经过去了很多天,但我发现添加以下内容将解决问题(当然使用您选择的版本):

    implementation 'net.java.dev.jna:jna:5.8.0@aar'
    

    【讨论】:

      【解决方案3】:

      koby hershkovitz 对“只需添加 @aar”的回答导致重复类:

      Duplicate class com.sun.jna.AltCallingConvention found in modules jetified-jna-5.8.0 (net.java.dev.jna:jna:5.8.0) and jetified-jna-5.8.0-runtime (net.java.dev.jna:jna:5.8.0)
      Duplicate class com.sun.jna.Callback found in modules jetified-jna-5.8.0 (net.java.dev.jna:jna:5.8.0) and jetified-jna-5.8.0-runtime (net.java.dev.jna:jna:5.8.0)
      Duplicate class com.sun.jna.Callback$UncaughtExceptionHandler found in modules jetified-jna-5.8.0 (net.java.dev.jna:jna:5.8.0) and jetified-jna-5.8.0-runtime (net.java.dev.jna:jna:5.8.0)
      Duplicate class com.sun.jna.CallbackParameterContext found in modules jetified-jna-5.8.0 (net.java.dev.jna:jna:5.8.0) and jetified-jna-5.8.0-runtime (net.java.dev.jna:jna:5.8.0)
      Duplicate class com.sun.jna.CallbackProxy found in modules jetified-jna-5.8.0 (net.java.dev.jna:jna:5.8.0) and jetified-jna-5.8.0-runtime (net.java.dev.jna:jna:5.8.0)
      ...
      

      要解决此问题,请在任何需要 jna 的库上也使用 @aar,否则 gradle 会将 JNA 库拉入两次。

      【讨论】:

        【解决方案4】:

        使用最新的 JNA 尤其是aar

        implementation "net.java.dev.jna:jna:5.9.0@aar"
        

        然后将必要的依赖项添加到您的资源路径中。 如需添加*.so文件,请下载相关jar并解压。 例如,如果您缺少 android-x86,

        1. 从这里下载 jar。 https://github.com/java-native-access/jna/blob/master/dist/android-x86-64.jar

        2. 解压jar文件

        3. 将提取的目录复制并粘贴到资源路径 示例资源路径:

          sourceSets {
              main {
                  jniLibs.srcDirs += ["$projectDir/src/debug/jniLibs"]
              }
          
              debug {
                  jniLibs.srcDirs += ["$projectDir/src/debug/jniLibs"]
              }
          
              release {
                  jniLibs.srcDirs += ["$projectDir/src/release/jniLibs"]
              }
          }
          
        4. 清理并重建项目

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-03
          • 1970-01-01
          • 1970-01-01
          • 2018-07-15
          • 2015-10-12
          • 2020-03-16
          相关资源
          最近更新 更多