我正在将一个React Native项目从react-native版本0.58.5迁移到0.60.4。
对于Android部分,我已经做了here提到的所有更改。
我在我的应用程序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
}
}
...我可以在构建时看到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] App crash on startup when enabling Hermes (enableHermes: true)
为什么当Hermes被禁用时,我会出现这种崩溃?
请注意,当将enableHermes设置为true时,不会发生崩溃。
发布于 2019-07-23 09:41:01
在完成本文中的这些步骤之后,我通过一个很小的更改解决了这个问题。
https://github.com/facebook/react-native/issues/25415
然后确保将这个jsc-android块添加到你的android/build.gradle中:
allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
//THIS ONE
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
}
}发布于 2020-05-11 20:20:03
通过将configurations.all添加到build.gradle中,可以使用较早版本的com.facebook.soloader:soloader
configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.2"
}
}像这样的build.gradle
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.2"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}如果上述步骤不起作用,请执行以下步骤
app/build.gradle.
android {
...
// add the following packagingOptions
packagingOptions {
pickFirst 'lib/x86_64/libjsc.so'
pickFirst 'lib/arm64-v8a/libjsc.so'
}
}我们还在应用程序/build.gradle的defaultConfig中添加了以下内容
ndk {
abiFilters 'armeabi-v7a', 'x86'
}发布于 2019-09-01 16:39:55
我通过下面的步骤解决了这个问题
3.将此行添加到app/build.gradle
project.ext.react = [
entryFile: "index.js" ,
enableHermes: false
]
def jscFlavor = 'org.webkit:android-jsc:+'
def enableHermes = project.ext.react.get("enableHermes", false);
dependencies {
if (enableHermes) {
def hermesPath = "../../node_modules/hermesvm/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
}
else { implementation jscFlavor }中
allprojects {
repositories {
maven {
url("$rootDir/../node_modules/react-native/android")
}
maven {
url "$rootDir/../node_modules/react-native/android"
}
google()
jcenter()
}
}https://stackoverflow.com/questions/57113794
复制相似问题