在我的Android应用中,我一直在使用.so库,该库位于libs/arm64-v8a
文件夹中,例如,
app
- libs
- arm64-v8a
- libsdk.so
我正在测试的目标设备支持arm64-v8a
指令集。
当库尝试加载.so
时,会弹出以下错误消息,
java.lang.UnsatisfiedLinkError: dlopen failed: "/data/app/com.example.app-VxrwbdJCJhWf5L_lBr_UPw==/lib/arm64/libsdk.so" is 32-bit instead of 64-bit
我以ZIP文件打开内置的APK,发现.so
已经在arm64-v8a
文件夹中。
为了解决此错误,我在应用程序的build.gradle
文件中添加了ABI过滤器,
ndk {
abiFilters 'arm64-v8a'
}
此外,这不起作用
ndk {
abiFilters "armeabi-v7a", "x86", 'armeabi', 'arm64-v8a'
}
但是错误仍然存在。拥有arm64-v8a
会将应用程序标记为64位,目标设备也将标记为64位(Android 10)(如本answer所述)。
一个问题可能是
.so
本身未针对64位设备进行编译。我不确定,有没有办法检查给定的.so
文件支持64位设备吗?
或
有什么方法可以在64位平台上运行32位库(
.so
)(假设该库是为32位平台编译的)?