Android JNA UnsatisfiedLinkError:未找到本机库(com / sun / jna / xxx / libjnidispatch.so)

时间:2018-11-19 22:46:52

标签: android jna libvirt

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

这是到目前为止的项目结构。

enter image description here,但是该解决方案对我不起作用

到目前为止,尚未在模拟器上对此进行测试,并且尚未导入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)

注意: Android Studio 3.0 没有安装c ++ SDK(因为我不编译二进制文件,所以我认为不需要) 如果不确定libvirt java jar是否可在android上运行。我试图找到有关此信息,但没有成功。如果有人对此发表评论,将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

    | 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 :(得分:0)

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 库拉入两次。