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.<clinit>(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 저장소가 루트 빌드 에 있는지 확인하십시오.
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 빌드 파일을 살펴 보는 것입니다. 다행히도 이것은 내가 발견하고 문제를 해결 한 첫 번째 차이점이었습니다. 이것이 작동하지 않으면 똑같이 할 수 있다고 생각합니다.
답변
방금 Android 용 빌드 폴더를 정리 한 후 정상적으로 작동했습니다. 짝짓기를 돕는 희망.
cd android
./gradlew clean
답변
- node_modules / jsc-android / README.md를 엽니 다.
- ‘내 반응 네이티브 앱과 함께 사용하는 방법’섹션을 찾습니다.
예를 들면 :
- android / build.gradle 수정
allprojects {
repositories {
maven {
// All of React Native (JS, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven {
// Local Maven repo containing AARs with JSC library built for Android
url "$rootDir/../node_modules/jsc-android/dist"
}
google()
jcenter()
}
}
- android / app / build.gradle 수정
android {
packagingOptions {
pickFirst '**/libjsc.so'
pickFirst '**/libc++_shared.so'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation "org.webkit:android-jsc:+"
implementation "com.facebook.react:react-native:+" // From node_modules
}
답변
나는 이것을 추가하여 해결했습니다.
configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.2"
}
}
답변
React Native 버전으로 업데이트하는 동안이 오류가 발생하는 경우 0.62.2
:
android/app/build.gradle
파일에 다음을 추가 하십시오.
dependencies {
implementation 'com.facebook.soloader:soloader:0.9.0+'
첫 번째 implementation
항목 중 하나로 .
답변
이 문제가 발생하는 다른 경우에는 비슷해 보이는 섹션이 2 개 있습니다. ! 에서 하단 repositories
섹션 을 업데이트해야합니다 android/build.gradle
.
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 16
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:3.4.1")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
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")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
}
}