我按照官方文档在我的应用程序中启用 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
将我的 ReactNative 应用程序升级到版本后0.64.2,应用程序在启动时崩溃。我知道我需要升级/指定hermes-engine到0.7.2. 问题是,我可以在哪里执行此操作?
问题:
将 React Native 升级到版本0.64.2并创建发布类型后.aab,将应用程序部署到物理设备。应用程序启动时崩溃。Github 中提出了类似的问题,并分享了解决方案以升级 Hermes-engine 版本。似乎 0.64.2 需要指定特定的hermes-engine,否则会崩溃。
但是我应该在哪里升级/指定版本呢?
hermes-engine版本~0.7.2位于node_modules/react-native/package.json 。构建.aab文件,部署到物理设备。应用程序按预期启动(没有崩溃)。RN 团队已经在他们的网站上发布了
通过RN 升级助手 
我的 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项目从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) 仅在 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) 我们有一个启用了 Hermes 的 React Native Android 应用程序。当我们的应用程序通过 Play 商店下载时(7 秒以上的启动时间),我们发现应用程序存在巨大的性能问题。以 APK 格式直接安装时,相同的构建运行速度非常快(<2 秒启动时间)。
有谁之前经历过这个吗?哪些因素会导致相同版本的 Play 商店安装与直接 APK 安装之间存在这种差异。
附加信息
昨天我的反应本机应用程序工作正常,但在成功编译(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) 在 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)
)
运行Expo应用程序时,您可能会遇到错误消息“Cannot read property \'getConstants\' of null, js engine: hermes\”。
\n我不知道原因,也不知道在哪里修复它。
\n\xef\xb8\x8f错误图像:
\n
我使用命令“npx expo start”来运行它。
\n我希望在 Expo Go 应用程序上对其进行实时测试。
\n请帮我。
\n我正在使用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设置