2017-08-12 32 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/

搜索 「更多。所以問題」

希望這有助於

相關問題