首页 > 解决方案 > 使用 Realm 与 Hermes (android) 反应原生:启动时崩溃

问题描述

我一直在用 React-Native 构建一个应用程序。它最初是一个 0.60 的项目,在开发过程中我已经对其进行了多次升级,而不是在 0.63.4 上。

我注意到,在 Android 上运行发布版本时,应用程序感觉非常缓慢。感觉就像它正在吃掉手机的所有内存。当我在 Android Studio 中运行它并附加一个分析器时,一切似乎都很正常(+- 15% CPU 使用率,128mb 内存使用率)。

我尝试将 Hermes 添加到我的应用程序中,看看它是否会产生任何影响,但是一旦我将enableHermes参数设置为 true、clean & build,我的应用程序会在启动后立即崩溃且没有任何错误消息(在成功构建后)。

然后我去了 React-Native 的文档,那里有一个警告说每个 Hermes 版本都针对一个特定的 RN 版本。好吧,我想。React 0.63.x 有 Hermes 版本 0.5.3。每当我去我的 yarn.lock 和 sethermes-engine "0.5.3"时,它说它找不到它并询问我要安装哪个版本。

我很困惑。

问题 什么版本的 Hermes 适合 React-Native 0.63.4,以及如何适当地添加它以防止我现在遇到的无错误消息崩溃?

更新 通过 Android Studio 运行我的应用程序时,我在运行日志中看到它在打开之后和崩溃之前给出了这条消息:

    E/SoLoader: couldn't find DSO to load: librealmreact.so caused by: dlopen failed: library "libjsc.so" not found result: 0
E/AndroidRuntime: FATAL EXCEPTION: create_react_context
    Process: com.dartscores, PID: 14692
    java.lang.UnsatisfiedLinkError: couldn't find DSO to load: librealmreact.so caused by: dlopen failed: library "libjsc.so" not found result: 0
        at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:896)
        at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:725)
        at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:649)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:629)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:577)
        at io.realm.react.RealmReactModule.<clinit>(RealmReactModule.java:56)
        at io.realm.react.RealmReactPackage.createNativeModules(RealmReactPackage.java:31)
        at com.facebook.react.ReactPackageHelper.getNativeModuleIterator(ReactPackageHelper.java:42)
        at com.facebook.react.NativeModuleRegistryBuilder.processPackage(NativeModuleRegistryBuilder.java:42)
        at com.facebook.react.ReactInstanceManager.processPackage(ReactInstanceManager.java:1347)
        at com.facebook.react.ReactInstanceManager.processPackages(ReactInstanceManager.java:1318)
        at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:1225)
        at com.facebook.react.ReactInstanceManager.access$1100(ReactInstanceManager.java:131)
        at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:1016)
        at java.lang.Thread.run(Thread.java:784)

这表明加载我在我的应用程序中使用的领域依赖项有问题?当我再次将 enableHermes 设置回 false 时,我没有收到此消息,并且一切似乎都运行良好(但性能很差)。

有没有人在使用 Hermes 时无法加载库的经验?

任何指导将不胜感激。

标签: androidreact-nativerealmreact-native-androidreact-native-hermes

解决方案


事实证明,正如这里所说,Realm 不支持 Hermes,团队正在努力完成它。好像我需要切换数据库..


推荐阅读