我尝试在Nexus 9上使用本机库运行应用程序.
应用程序退出并显示错误消息:
java.lang.UnsatisfiedLinkError: dlopen failed: "lib_xyz.so" is 32-bit instead of 64-bit
Run Code Online (Sandbox Code Playgroud)
是否有任何已知的解决方法来解决此问题(当然,重新编译库并使apk更大)?
我有一个Android应用程序,我用AOSP(Kitkat)编译为android系统应用程序,它运行正常.我的应用程序依赖于使用Android-NDK编译为32位库的本机代码.我在我的android应用程序libs/armeabi文件夹中复制本机库,然后在AOSP中构建我的android应用程序(我还修改了device.mk以复制/ system/lib文件夹中的libs ).在Android Kitkat上一切正常.
当我在Android-L(64位平台)上移植我的应用程序时,我无法从Android应用程序加载我的本机库,错误就像 -
java.lang.UnsatisfiedLinkError: dlopen failed: "libfoobar.so" is 32-bit instead of 64-bit
我使用以下java代码加载本机库 -
if ( ENABLE_ANDROID_INTEGRATION )
{
System.load("/system/lib/libfoobar.so");
}
else
{
System.loadLibrary("foobar");
}
Run Code Online (Sandbox Code Playgroud)
当我使用AOSP构建代码时,ENABLE_ANDROID_INTEGRATION为真
更有趣的是,当我关闭ENABLE_ANDROID_INTEGRATION并在Eclipse中构建我的应用程序时,在AOSP之外作为普通的"可下载"应用程序,然后我的应用程序在64位Android平台上正常运行.
我想知道的是 - 如何构建我的应用程序作为64位Android平台的32位库(即AOSP构建)的本机android系统应用程序?
我试过的 - 我在我的Android应用程序的Android.mk文件中使用了LOCAL_32_BIT_ONLY = true标志,但它接缝它没用.可能是我不完全了解这个标志的使用.
因为我的时间不多了所以我更喜欢在这里发布这个问题而不是RnD.如果有人遇到这个问题,请指导.
此致,Meraj