我刚刚将项目更新为使用react-native版本0.60.2。但是,当我尝试在Android设备上运行应用程序时,启动屏幕后它将崩溃。我收到以下错误日志:
E/AndroidRuntime: FATAL EXCEPTION: create_react_context Process: com.tjspeed, PID: 3909 java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:738) at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:591) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:529) at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:484) at com.facebook.hermes.reactexecutor.HermesExecutor.(HermesExecutor.java:20) at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:27) at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:949) at java.lang.Thread.run(Thread.java:760)
这里的建议很少:https : //github.com/facebook/react-native/issues/25601,但不幸的是,这些建议都不对我有用。请提出解决方法。
从0.59.8升级到0.60.4后,我遇到了同样的问题
确保已在app / build.gradle中添加了所有这些行,尤其是依赖项部分,因为这确保您具有JSC二进制文件
project.ext.react = [ ... // your index js if not default, other settings // Hermes JSC ? enableHermes: false, ... ] def jscFlavor = 'org.webkit:android-jsc:+' def enableHermes = project.ext.react.get("enableHermes", false); dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.facebook.react:react-native:+" // From node_modules if (enableHermes) { // For RN 0.60.x def hermesPath = "../../node_modules/hermesvm/android/" // --- OR ---- // for RN 0.61+ def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor }
编辑
另外,确保Hermes Maven存储库位于您的根目录build.gradle中
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
我在project_dir / build.gradle的allProject块中添加了该块,然后崩溃消失了。
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
我所做的是使用react-native init创建一个新项目,并通过了android build文件。幸运的是,这是我注意到并解决了我的问题的第一个区别。我想如果这不起作用,您也可以这样做。