相关疑难解决方法(0)

在64位android上使用32位jni库

我尝试在Nexus 9上使用本机库运行应用程序.

应用程序退出并显示错误消息:

java.lang.UnsatisfiedLinkError: dlopen failed: "lib_xyz.so" is 32-bit instead of 64-bit
Run Code Online (Sandbox Code Playgroud)

是否有任何已知的解决方法来解决此问题(当然,重新编译库并使apk更大)?

java-native-interface android 32bit-64bit

28
推荐指数
3
解决办法
3万
查看次数

如何在64位Android-L平台上使用32位本机库

我有一个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

64-bit android-ndk android-source android-5.0-lollipop

9
推荐指数
2
解决办法
2万
查看次数