标签: react-native-hermes

如何在react-native中启用Hermes引擎

我按照官方文档在我的应用程序中启用 Hermes 引擎,但以下内容始终返回 false:

    const isHermes = () => !!global.HermesInternal;
    console.log('>>>>>>>>>>>>>', isHermes());
Run Code Online (Sandbox Code Playgroud)

我所做的更改是在 android/app/build.gradle 中设置以下内容:

project.ext.react = [
    enableHermes: true,  // clean and rebuild if changing
]
Run Code Online (Sandbox Code Playgroud)

然后我做了一个干净的构建:

cd android && ./gradlew clean

yarn android
Run Code Online (Sandbox Code Playgroud)

但console.log总是返回false

react-native react-native-hermes

7
推荐指数
1
解决办法
1133
查看次数

如何指定/升级hermes-engine版本?

总长DR

将我的 ReactNative 应用程序升级到版本后0.64.2,应用程序在启动时崩溃。我知道我需要升级/指定hermes-engine0.7.2. 问题是,我可以在哪里执行此操作?

细节

问题: 将 React Native 升级到版本0.64.2并创建发布类型后.aab,将应用程序部署到物理设备。应用程序启动时崩溃。Github 中提出了类似的问题,并分享了解决方案以升级 Hermes-engine 版本。似乎 0.64.2 需要指定特定的hermes-engine,否则会崩溃。

但是我应该在哪里升级/指定版本呢?

我尝试过的

  1. 手册指定hermes-engine版本~0.7.2位于node_modules/react-native/package.json 。构建.aab文件,部署到物理设备。应用程序按预期启动(没有崩溃)。

如前所述...

RN 团队已经在他们的网站上发布了在此输入图像描述

通过RN 升级助手 在此输入图像描述

react-native react-native-hermes

6
推荐指数
0
解决办法
2476
查看次数

类型错误:未定义不是函数,js引擎:hermes

我的 React Native (0.66.3) 应用程序今天弹出一个错误,其中的稳定代码已经很长一段时间没有任何更改了。它位于 macOS Big Sur 上。这是错误:

 ERROR  TypeError: undefined is not a function, js engine: hermes
Error: ENOENT: no such file or directory, open '/Users/macair/Documents/code/js/xyz_app5/http:/localhost:8081/index.bundle?platform=ios&dev=true&minify=false&modulesOnly=false&runModule=true&app=org.reactjs.native.example.xyz-app5'
    at Object.openSync (fs.js:498:3)
    at Object.readFileSync (fs.js:394:35)
    at getCodeFrame (/Users/macair/Documents/code/js/xyz_app5/node_modules/metro/src/Server.js:919:18)
    at Server._symbolicate (/Users/macair/Documents/code/js/xyz_app5/node_modules/metro/src/Server.js:992:22)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async Server._processRequest (/Users/macair/Documents/code/js/xyz_app5/node_modules/metro/src/Server.js:403:7) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '/Users/macair/Documents/code/js/xyz_app5/http:/localhost:8081/index.bundle?platform=ios&dev=true&minify=false&modulesOnly=false&runModule=true&app=org.reactjs.native.example.xyz-app5'
}
Run Code Online (Sandbox Code Playgroud)

这是IOS模拟器上显示的错误:

在此输入图像描述

该错误似乎与 React Native 中的 Metro 相关。

react-native metro-bundler react-native-hermes

6
推荐指数
1
解决办法
1万
查看次数

出现“ java.lang.UnsatisfiedLinkError:找不到要加载的DSO:libhermes.so”错误

我正在将React Native项目从react-native版本0.58.5迁移到0.60.4。

对于Android部分,我已经完成了此处提到的所有更改

我在我的应用程序build.gradle文件中让爱马仕(Hermes)禁用:

project.ext.react = [
    entryFile: "index.js",
    enableHermes: false,  // clean and rebuild if changing
]
...
def jscFlavor = 'org.webkit:android-jsc:+'
def enableHermes = project.ext.react.get("enableHermes", false);
...
dependencies {
    ...

    if (enableHermes) {
      println 'Hermes is enabled'
      def hermesPath = "../../node_modules/hermesvm/android/";
      debugImplementation files(hermesPath + "hermes-debug.aar")
      releaseImplementation files(hermesPath + "hermes-release.aar")
    } else {
      println 'Hermes is disabled'
      implementation jscFlavor
    }
}
...
Run Code Online (Sandbox Code Playgroud)

我可以Hermes is disabled在构建时看到打印内容。这正是我想要的。

使用react-native run-android启动Android应用程序时,在启动时出现以下崩溃:

FATAL EXCEPTION: create_react_context
                         E  Process: com.reactnativetestapp, …
Run Code Online (Sandbox Code Playgroud)

android react-native react-native-hermes

5
推荐指数
1
解决办法
2338
查看次数

React Native 0.60.4 / 找不到要加载的 DSO:Firebase 测试实验室上的 libhermes.so

仅在 Firebase 测试实验室 (Robo) 上测试我的本机应用程序时,我才在启动时遇到此错误

java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
Run Code Online (Sandbox Code Playgroud)

在具有不同 API 的多个设备上进行了测试,它仅适用于 API 21 和 22。奇怪的是,该应用程序通过了 Play 商店预发布报告中的所有测试。

其实最让人惊讶的是我用的不是hermes而是JSC。该错误仅在我上传 aab (gradlew bundleRelease) 时出现。当我上传通用 apk (gradlew assembleRelease) 时,一切顺利。

这是我的 package.json

{
  "name": "",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "react-native start",
    "test": "jest",
    "lint": "eslint ."
  },
  "dependencies": {
    "@react-native-community/netinfo": "^4.1.4",
    "@redux-offline/redux-offline": "^2.5.2-native.0",
    "buffer": "^5.4.2",
    "hermes-engine": "^0.2.1",
    "jsc-android": "^241213.1.0",
    "prop-types": "^15.7.2",
    "react": "16.8.6",
    "react-native": "0.60.4",
    "react-native-animatable": "^1.3.2",
    "react-native-bootsplash": "^0.1.1",
    "react-native-device-info": "^3.0.1",
    "react-native-elements": "^1.1.0",
    "react-native-extended-stylesheet": "^0.12.0",
    "react-native-firebase": "^5.5.6", …
Run Code Online (Sandbox Code Playgroud)

android react-native firebase-test-lab react-native-hermes

5
推荐指数
0
解决办法
3374
查看次数

React Native Android 应用程序发布版本(使用 Hermes)仅在通过 Play 商店下载时速度很慢

我们有一个启用了 Hermes 的 React Native Android 应用程序。当我们的应用程序通过 Play 商店下载时(7 秒以上的启动时间),我们发现应用程序存在巨大的性能问题。以 APK 格式直接安装时,相同的构建运行速度非常快(<2 秒启动时间)。

有谁之前经历过这个吗?哪些因素会导致相同版本的 Play 商店安装与直接 APK 安装之间存在这种差异。

附加信息

  • 反应原生:0.63.4
  • enableSeparateBuildPerCPUArchitecture=true
  • enableProguardInReleaseBuilds=false

android react-native react-native-hermes

5
推荐指数
0
解决办法
66
查看次数

SoLoader:找不到要加载的 DSO:libjsijniprofiler.so 原因:dlopen 失败:库“libhermes.so”

昨天我的反应本机应用程序工作正常,但在成功编译(gradle 和 build)并运行应用程序后,我收到以下错误消息:

2021-10-08 14:51:51.378 7178-7178/com.appname E/SoLoader: couldn't find DSO to load: libjsijniprofiler.so caused by: dlopen failed: library "libhermes.so" not found: needed by /data/app/~~p8ttNiYyXwU4wozNVHBjGQ==/com.appname-nVEXUjtlwdrOPFZH2SvGwQ==/lib/x86/libjsijniprofiler.so in namespace classloader-namespace result: 0
2021-10-08 14:51:51.382 7178-7178/com.appname E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.appname, PID: 7178
    java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libjsijniprofiler.so caused by: dlopen failed: library "libhermes.so" not found: needed by /data/app/~~p8ttNiYyXwU4wozNVHBjGQ==/com.appname-nVEXUjtlwdrOPFZH2SvGwQ==/lib/x86/libjsijniprofiler.so in namespace classloader-namespace result: 0
Run Code Online (Sandbox Code Playgroud)

在过去的两天里我尝试了 100 种不同的建议解决方案......我尝试过:

implementation 'com.facebook.soloader:soloader:0.9.0+'
Run Code Online (Sandbox Code Playgroud)

我的项目的 build.gradle 是这样的:

    repositories {
        mavenLocal()
        maven {
            // All of React …
Run Code Online (Sandbox Code Playgroud)

android android-studio react-native react-native-hermes

5
推荐指数
1
解决办法
4235
查看次数

为 ios 启用 Hermes 引擎:在 Mac M1 上 React Native

在 podfile 中启用 Hermes 引擎后,在构建应用程序时会抛出错误

"Undefined symbols for architecture x86_64: "vtable for facebook::react::HermesExecutorFactory"

爱马仕版本:0.9.0

RN:0.66.1

pod 文件

 platform :ios, '11.0'
 target 'OneSignalNotificationServiceExtension' do
 pod 'react-native-onesignal', :path => '../node_modules/react-native-onesignal'
end

target '****' do
# Pods for ****
config = use_native_modules!
use_react_native!(path: config['reactNativePath'])

use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => true
Run Code Online (Sandbox Code Playgroud)

错误 在此输入图像描述

performance ios react-native react-native-hermes apple-m1

5
推荐指数
1
解决办法
2853
查看次数

Expo无法读取null的属性“getConstants”,js引擎:hermes

运行Expo应用程序时,您可能会遇到错误消息“Cannot read property \'getConstants\' of null, js engine: hermes\”。

\n

我不知道原因,也不知道在哪里修复它。

\n

\xef\xb8\x8f错误图像:

\n

1

\n
\n
\n我将 SDK 从 46 升级到 48(使用命令 \'expo Upgrade\')
\n删除了 node_modules 文件夹,并使用yarn Install重新安装。
但是,当我尝试运行它时,出现了错误。\n

我使用命令“npx expo start”来运行它。

\n

我希望在 Expo Go 应用程序上对其进行实时测试。

\n

请帮我。

\n

runtime-error react-native expo react-native-hermes expo-go

5
推荐指数
1
解决办法
3510
查看次数

Redux DevTools 与 Expo 49 beta(React Native 和 Hermes 引擎)

我正在使用Expo 49 Beta (React Native),它引入了 Hermes 的新调试功能。这意味着还集成了redux-devtools的react-native-debugger已被弃用。我尝试独立使用,但没有成功。redux-devtools


到目前为止我尝试过的:

1.@redux-devtools/remote根据https://github.com/reduxjs/redux-devtools/issues/1382进行补丁

2.用于@redux-devtools/cli通过运行来启动本地服务器redux-devtools --port=8000 --open

3.设置商店

import {devToolsEnhancer} from '@redux-devtools/remote';
import {configureStore} from '@reduxjs/toolkit';

const store = configureStore({
    reducer: rootReducer,
    devTools: true,
    enhancers: [
      devToolsEnhancer({
        name: Platform.OS,
        port: 8000,
        secure: false,
        realtime: true,
      }),
    ],
  });
Run Code Online (Sandbox Code Playgroud)

4.运行应用程序

运行应用程序


5.Redux DevTools设置

redux 开发工具设置



结果:

在此输入图像描述

react-native redux expo react-native-hermes

5
推荐指数
1
解决办法
2451
查看次数