Ich habe gerade mein Projekt aktualisiert, um die reaktionsnative Version 0.60.2 zu verwenden . Wenn ich jedoch versuche, eine Anwendung auf einem Android-Gerät auszuführen, stürzt sie nach dem Startbildschirm ab. Ich habe die folgenden Fehlerprotokolle erhalten:
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)
Einige Vorschläge sind hier verfügbar: https://github.com/facebook/react-native/issues/25601, aber leider hat keiner von ihnen für mich funktioniert. Bitte schlagen Sie die Problemumgehung vor.
android
react-native
V-Xtreme
quelle
quelle
Antworten:
Ich hatte das gleiche Problem nach dem Upgrade von 0,59,8 auf 0,60,4
Stellen Sie sicher, dass Sie alle diese Zeilen in Ihrer app / build.gradle hinzugefügt haben , insbesondere den Abhängigkeitsteil, da dies sicherstellt, dass Sie über JSC-Binärdateien verfügen
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 }
BEARBEITEN
Stellen Sie außerdem sicher, dass sich das Hermes Maven-Repo in Ihrem root build.gradle befindet
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
quelle
Ich habe diesen Block im allProject-Block in project_dir / build.gradle hinzugefügt und der Absturz ist verschwunden.
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
Was ich getan habe, ist, ein neues Projekt mit reaktionsnativen Init zu erstellen und die Android-Build-Dateien durchzugehen. Glücklicherweise war dies der erste Unterschied, den ich bemerkte und mein Problem behebte. Ich denke, Sie könnten das Gleiche tun, wenn dies nicht funktioniert.
quelle
error: package com.facebook.react.module.annotations does not exist
Ich habe gerade den Build-Ordner für Android bereinigt und danach hat es gut funktioniert. Hoffe das hilft sich zu paaren.
cd android ./gradlew clean
quelle
zum Beispiel:
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 { 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 }
quelle
pickFirst '**/libjsc.so' pickFirst '**/libc++_shared.so'
Ich habe dies durch Hinzufügen gelöst
configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.8.2" } }
quelle
app/build.gradle
Innen Ende vondependencies { }
dependencies { implementation project(':react-native-permissions') configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.8.2" } } }
Falls Sie beim Aktualisieren auf die React Native-Version auf diesen Fehler stoßen
0.62.2
:Fügen Sie Ihrer
android/app/build.gradle
Datei Folgendes hinzu :dependencies { implementation 'com.facebook.soloader:soloader:0.9.0+'
als einer der ersten
implementation
Einträge.Lösung von hier genommen
quelle
Für andere, die auf dieses Problem stoßen, gibt es zwei Abschnitte, die ähnlich aussehen. Sie müssen den unteren
repositories
Bereich in aktualisierenandroid/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() } }
quelle
allprojects { repositories { maven { url "$rootDir/../node_modules/react-native/android" } maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") } mavenLocal() google() jcenter() } }
quelle
Nachdem ich alle Ratschläge ohne Erfolg befolgt hatte, baute ich eine * .apk anstelle einer * .aab. Die APK ist 16 MB im Gegensatz zur 8 MB AAB, aber ich habe endlich den UnsatisfiedLinkError losgeworden.
So erstellen Sie ein AAB (abgestürzt mit UnsatisfiedLinkError):
cd android && ./gradlew clean && ./gradlew bundleRelease
So erstellen Sie eine APK (kein Absturz und Hermes funktionieren auch gut):
cd android && ./gradlew clean && ./gradlew assembleRelease
quelle
Ich habe nichts mehr getan.
./gradlew clean
löste mein Problem.quelle
In meinem Fall wurde Hermes nie aktiviert und dennoch trat dieser Fehler auf. Durch Bereinigen (über Android Studio) und Wiederherstellen wurde der Fehler behoben.
quelle
./gradlew clean
einen Unterschied?Versuchen Sie, Ihr ndk-Objekt in app / build.gradle zu ersetzen
defaultConfig { ... ndk { abiFilters "armeabi-v7a", "x86" } }
quelle
Ich hatte diesen Fehler, als ich versuchte, mit einer älteren Version von React Native vor 0.60 zu laufen, während in der
package.json
eine neuere Version definiert war (nach 0.60).quelle
Es passiert mir, nachdem ich mein Android Studio aktualisiert habe, dann bereinige und baue ich es erneut, es stürzt nicht mehr ab.
quelle
In meinem Fall, schalten Sie einfach die
enableHermes
auf inapp/build.gradle
:project.ext.react = [ entryFile : "index.js", enableHermes: true, // HERE! ]
quelle
Wenn jemand auch nach dem Anwenden aller oben genannten Schritte immer noch mit dem Problem konfrontiert ist, finden Sie hier die Lösung
Fügen Sie in der Datei MainApplication.java diesen Import hinzu:
import com.facebook.react.BuildConfig;
quelle
BuildConfig.DEBUG
Wert durcheinander bringen und dazu führen, dass Ihre Debug-Builds nicht mehr funktionieren.Lösen Sie dieses Problem auf einfache Weise.
apply plugin: "com.android.application" // def useIntlJsc = false import com.android.build.OutputFile project.ext.react = [ entryFile: "index.js", bundleInStaging: true, // Add this bundleInInternalTest: true, // Add this bundleInRelease: true ] apply from: "../../node_modules/react-native/react.gradle" def enableSeparateBuildPerCPUArchitecture = false def enableProguardInReleaseBuilds = false def jscFlavor = 'org.webkit:android-jsc:+' def enableHermes = project.ext.react.get("enableHermes", false); android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId "com.inbox.clean.free.gmail.unsubscribe.smart.email.fresh.mailbox" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 2597205 //4242929 versionName "1.6.3" multiDexEnabled true ndk { // abiFilters "armeabi-v7a", "x86" // abiFilters.clear() } } signingConfigs { release { if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) { storeFile file(MYAPP_RELEASE_STORE_FILE) storePassword MYAPP_RELEASE_STORE_PASSWORD keyAlias MYAPP_RELEASE_KEY_ALIAS keyPassword MYAPP_RELEASE_KEY_PASSWORD } } } buildTypes { release { minifyEnabled enableProguardInReleaseBuilds shrinkResources enableSeparateBuildPerCPUArchitecture proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" signingConfig signingConfigs.release } } project.ext.sentryCli = [ logLevel: "debug", flavorAware: false, //add enableHermes: false ] compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } splits { abi { reset() enable true universalApk false // If true, also generate a universal APK include "armeabi-v7a","arm64-v8a","x86","x86_64" //"armeabi-v7a" "arm64-v8a" "x86" "x86_64" // include "armeabi-v7a", "x86" exclude "ldpi", "xxhdpi", "xxxhdpi" } } applicationVariants.all { variant -> variant.outputs.each { output -> // For each separate APK per architecture, set a unique version code as described here: // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a":3,"x86_64":4] def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = versionCodes.get(abi) * 1048576 + defaultConfig.versionCode } } } } dependencies { implementation project(':react-native-linear-gradient') implementation fileTree(dir: "libs", include: ["*.jar"]) if (enableHermes) { def hermesPath = "../../node_modules/hermesvm/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } } // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { from configurations.compile into 'libs' } apply plugin: 'com.google.gms.google-services'
quelle