缺少librealmreact.so的64位版本

时间:2019-02-25 08:30:31

标签: realm

使用:

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位(预编译)。如何确保我的捆绑包中包含该物品?

2 个答案:

答案 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位文件。


因此,您可以按照以下步骤尝试解决此问题:

  1. 确保模块build.gradle是这样的:
...
android {
...
    splits {
        abi {
            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }
    defaultConfig {
       ndk {
            abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
       }
    }
}
  1. 如果step1无法解决您的问题,请尝试将SoLoader升级到版本0.8.0:
configurations.all {
     resolutionStrategy {
       force "com.facebook.soloader:soloader:0.8.0"
     }
}