Android 5.0 Lollipop上的UnsatisfiedLinkError

时间:2015-03-11 16:37:21

标签: android android-ndk android-5.0-lollipop

我通过以下方式加载我的本地库:

try {
       System.loadLibrary("myNative");
} catch (UnsatisfiedLinkError e) {
       //java.lang.UnsatisfiedLinkError here
       System.load("/data/data/com.my.app/my_native/libmyNative.so");
}

上述代码在除Android 5.0 Lollipop之外的其他设备上运行良好。在 Android 5.0 Lollipop 设备上运行时,我不断收到以下错误:

java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.my.app/my_native/libmyNative.so" is 32-bit instead of 64-bit
at java.lang.Runtime.load(Runtime.java:331)
at java.lang.System.load(System.java:982)

如何解决这个问题?

===更新====

我将原始库从lib/<archType>/libmyNative.so复制到/data/data/com.my.app/my_native/libmyNative.so,然后使用上面的代码加载库。

1 个答案:

答案 0 :(得分:2)

似乎打包lib的方式的一部分(将它们从lib/<archType>/libmyNative.so复制到/data/data/com.my.app/my_native/libmyNative.so)会使安装程序感到困惑。安装APK时,它应该已经自动提取了正确的arch类型的库并将它们提供给System.loadLibrary - 您不需要手动将任何内容复制到my_native等自定义目录中。

在这种情况下<archType>是现有的(armeabiarmeabi-v7a等)还是您自己的?如果它不是标准的安装程序之一,安装程序将不知道您的应用程序包含32位本机代码,因此将以首选模式(64位)启动应用程序进程。