我正在将 React Native 项目从 react-native 版本 0.58.5 迁移到 0.60.4。
对于 Android 部分,我已经完成了此处提到的所有更改
我让 Hermes 在我的应用程序build.gradle
文件中禁用:
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
}
}
...
Hermes is disabled
我可以在构建时看到打印。这正是我想要的。
使用 react-native run-android 启动 Android 应用程序时,我在启动时遇到以下崩溃:
FATAL EXCEPTION: create_react_context
E Process: com.reactnativetestapp, PID: 21038
E java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
E at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:738)
E at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:591)
E at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:529)
E at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:484)
E at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
E at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:27)
E at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:949)
E at java.lang.Thread.run(Thread.java:764)
经过一些研究后,我可以看到想要启用 Hermes 并且 gradle 配置错误的人会发生这种崩溃:[0.60.3] 启用 Hermes 时应用程序在启动时崩溃(enableHermes:true)
为什么在 Hermes 禁用时我会发生此崩溃?
请注意,当设置enableHermes
为true
不发生崩溃时。