我在我的应用程序中使用本机库,该库仅为armeabi,armeabi-v7a和x86编译.
在像Samsung S6这样的64位设备上加载此库时,应用程序崩溃并出现UnsatisfiedLinkError
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.myapp-2/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-2/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libfoo.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:989)
Run Code Online (Sandbox Code Playgroud)
不幸的是,图书馆是封闭的来源.有没有办法解决这个问题而无需使用64位目标重新编译库?
我有一个使用一些JNI代码的Android应用程序.长话短说(双关语),几乎不可能将JNI库转换为64位,因为它需要进行大量更改.代码(Java和JNI)在armeabi-v7a架构上运行良好.
使用loadLibrary加载库.当我尝试在Nexus 6上运行我的应用程序时,应用程序加载正常.执行loadLibrary后,应用程序崩溃并显示此处描述的错误.
根据我的理解,问题是在Nexus 6上执行时,应用程序构建为arm64-8a.但这些库不是为arm64-8a构建的(因为64位版本存在我在问题开头提到的问题).
我的问题是,我可以强制arm64-8a设备也运行armeabi-v7a代码吗?我如何强制我的应用程序apk是armeabi-v7a所以它只是32位无论设备?