首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取"java.lang.UnsatisfiedLinkError:找不到要加载的DSO : libhermes.so“错误

获取"java.lang.UnsatisfiedLinkError:找不到要加载的DSO : libhermes.so“错误
EN

Stack Overflow用户
提问于 2019-07-19 21:43:46
回答 4查看 12.3K关注 0票数 12

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

对于Android部分,我已经做了here提到的所有更改。

我在我的应用程序build.gradle文件中禁用了Hermes:

代码语言:javascript
复制
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应用程序时,我在启动时遇到以下崩溃:

代码语言:javascript
复制
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时,不会发生崩溃。

EN

回答 4

Stack Overflow用户

发布于 2019-07-23 09:41:01

在完成本文中的这些步骤之后,我通过一个很小的更改解决了这个问题。

https://github.com/facebook/react-native/issues/25415

然后确保将这个jsc-android块添加到你的android/build.gradle中:

代码语言:javascript
复制
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()
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-05-11 20:20:03

通过将configurations.all添加到build.gradle中,可以使用较早版本的com.facebook.soloader:soloader

代码语言:javascript
复制
configurations.all {
    resolutionStrategy {
        force "com.facebook.soloader:soloader:0.8.2"
    }
}

像这样的build.gradle

代码语言:javascript
复制
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.

代码语言:javascript
复制
android {
  ...
  // add the following packagingOptions 
  packagingOptions {
    pickFirst 'lib/x86_64/libjsc.so'
    pickFirst 'lib/arm64-v8a/libjsc.so'
  }
}

我们还在应用程序/build.gradle的defaultConfig中添加了以下内容

代码语言:javascript
复制
ndk {
  abiFilters 'armeabi-v7a', 'x86'
}
票数 1
EN

Stack Overflow用户

发布于 2019-09-01 16:39:55

我通过下面的步骤解决了这个问题

  1. 安装hermesvm : npm i hermesvm
  2. install jsc-android : npm i jsc-android

3.将此行添加到app/build.gradle

代码语言:javascript
复制
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 }

  1. 将这个jsc-android块添加到您的android/build.gradle:

代码语言:javascript
复制
     allprojects {
       repositories {
         maven {
           url("$rootDir/../node_modules/react-native/android")
         }
         maven {
            url "$rootDir/../node_modules/react-native/android"
         }
         google()
         jcenter()
       }
     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57113794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档