使用:
realm 2.22.0
react-native 0.58.5
尝试在Android(6.0)64位Huawei P9 lite上运行
使用Android Studio构建
应用程序立即崩溃并出现错误:
E / SoLoader:加载lib时出错:dlopen失败:“ /data/data/com.netballninja/lib-main/librealmreact.so”是32位而不是64位的lib .. >
在32位Android模拟器上运行应用程序很好。
我已经分析了APK文件,实际上/libs/arm64-v8a
下的librealmreact.so不存在(仅在armeabi-v7a下)。 64位支持似乎已被移植回本机反应式0.58.4(原定为0.59)。
我曾尝试从APK中删除对arm64-v8a
的支持(如果没有64位库,则认为Android操作系统会降为32位),然后该应用程序确实可以在32- 64位设备上的位模式。
我假设我确实需要一个librealmreact.so,它是64位(预编译)。如何确保我的捆绑包中包含该物品?
答案 0 :(得分:0)
您必须将此行添加到app / build.gradle
android {
....
defaultConfig {
....
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
答案 1 :(得分:0)
这是SoLoader的已知错误。
由this在v0.8.0中修复。
正如您所说,导致应用程序崩溃的真正原因是:
然后,该应用程序确实会在64位设备上以32位模式运行。
SoLoader将在应用程序首次运行时遵循某些规则从.apk文件中提取一些.so文件。在64位设备中,如果.apk文件包含64位.so文件,则soloader将提取它们而不是32位文件。
因此,您可以按照以下步骤尝试解决此问题:
build.gradle
是这样的:...
android {
...
splits {
abi {
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
}
configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.0"
}
}