2017-08-12 34 views
0

我在github中找到了一个android应用程序,它是由C++编写的并使用jni。在其jniLib中,我只找到了“armeabi-v7a”目录,并且所有jni文件(.so)都存储在这里。我的android手机CPU架构是aarch64(arm-v8a),并且该应用可以在我的手机上正常运行。但之后,我在我自己的应用程序的移动SDK,它总是提示错误在Android应用程序中,是否有可能使用ARM库为aarch64 cpu?

java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-aarch64/libjnidispatch.so) not found in resource path (.)

但在示例应用程序时,我取出相同的“所以”文件,它说:

java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/android-arm/libjnidispatch.so) not found in resource path (.)

如此,会发生什么?

回答

0

通常,Android设备不支持多个ABI,并且64位设备确实支持某些32位体系结构的本机代码构建。例如,arm64(64位)设备将始终支持armeabi-v7a(32位),以确保与旧应用程序的兼容性。这是Google直接要求的。

对于instace,看哪个架构设备支持,运行:

  • 预棒棒糖: adb shell getprop ro.product.cpu.abi
  • 棒棒糖&更高: adb shell getprop ro.product.cpu.abilist

你应该可以看到列表几个ABI作为命令的结果。

我最近读了一篇来自Realm的devblog,在这篇文章中他们解决了一些与JNI相关的问题。其中之一与您所面对的相似。

他们的结论是,当同一应用程序需要加载64位32位本机库时,Android会感到困惑,并且只会尝试加载64位版本,即使依赖项只有32位版本的本机代码。

对于您的情况,您尝试加载32位的本机库版本,但Android试图加载它的64位版本。如果您的其他依赖项之一有64位本机库,则可能会发生这种情况。

我提到的devblog:https://academy.realm.io/posts/kenneth-geisshirt-tales-developing-sdks-at-scale/

搜索 “更多。所以问题”

希望这有助于

相关问题