Acabo de actualizar mi proyecto para usar la versión nativa de reacción 0.60.2 . Pero cuando intento ejecutar una aplicación en un dispositivo Android, se bloquea después de la pantalla de inicio. Obtuve los siguientes registros de errores:
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)
Pocas sugerencias disponibles aquí: https://github.com/facebook/react-native/issues/25601 pero desafortunadamente ninguna de ellas funcionó para mí. Sugiera la solución alternativa.
android
react-native
V-Xtreme
fuente
fuente
Respuestas:
Tuve el mismo problema después de actualizar de 0.59.8 a 0.60.4
Asegúrese de haber agregado todas estas líneas en su aplicación / build.gradle , especialmente la parte de dependencias, ya que esto asegura que tenga JSC binary
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 }
EDITAR
Además, asegúrese de que el repositorio de Hermes Maven esté en su construcción raíz .
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
fuente
Agregué este bloque en el bloque allProject en project_dir / build.gradle y el bloqueo desapareció.
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
Lo que hice fue crear un nuevo proyecto con react-native init y revisé los archivos de compilación de Android. Afortunadamente, esta fue la primera diferencia que noté y solucionó mi problema. Supongo que podrías hacer lo mismo si esto no funciona.
fuente
error: package com.facebook.react.module.annotations does not exist
Acabo de limpiar la carpeta de compilación para Android y después de eso, funcionó bien. Espero que ayude a aparearse.
cd android ./gradlew clean
fuente
por ejemplo:
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 }
fuente
pickFirst '**/libjsc.so' pickFirst '**/libc++_shared.so'
He resuelto esto agregando
configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.8.2" } }
fuente
app/build.gradle
final interior dedependencies { }
dependencies { implementation project(':react-native-permissions') configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.8.2" } } }
En caso de que se enfrente a este error al actualizar a la versión React Native
0.62.2
:Agregue lo siguiente a su
android/app/build.gradle
archivo:dependencies { implementation 'com.facebook.soloader:soloader:0.9.0+'
como una de las primeras
implementation
entradas.Solución tomada de aquí
fuente
Para otros que se encuentran con este problema, hay 2 secciones que se ven similares. ¡Necesitas actualizar la
repositories
sección inferior enandroid/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() } }
fuente
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() } }
fuente
Después de seguir todos los consejos sin éxito, construí un * .apk en lugar de un * .aab. El APK es de 16 MB en comparación con los 8 MB de AAB, pero finalmente me deshice del UnsatisfiedLinkError.
Para construir un AAB (bloqueado con UnsatisfiedLinkError):
cd android && ./gradlew clean && ./gradlew bundleRelease
Para construir un APK (sin fallas y hermes también funciona bien):
cd android && ./gradlew clean && ./gradlew assembleRelease
fuente
No hice nada más.
./gradlew clean
resolvió mi problema.fuente
En mi caso, Hermes nunca se habilitó y, sin embargo, encontré este error. La limpieza (a través de Android Studio) y la reconstrucción resolvieron el error.
fuente
./gradlew clean
marca la diferencia?Intente reemplazar su objeto ndk dentro de la aplicación / build.gradle
defaultConfig { ... ndk { abiFilters "armeabi-v7a", "x86" } }
fuente
Tuve este error cuando intentaba ejecutar con una versión anterior de React Native, antes de 0.60, mientras que
package.json
tenía una versión más nueva definida (publicación 0.60).fuente
Me pasa después de actualizar mi estudio de Android, luego limpio y construyo nuevamente, ya no se bloquea.
fuente
En mi caso, sólo se conecta el
enableHermes
encendido enapp/build.gradle
:project.ext.react = [ entryFile : "index.js", enableHermes: true, // HERE! ]
fuente
Si alguien sigue enfrentando el problema incluso después de aplicar y probar todos los pasos anteriores, aquí está la solución
En MainApplication.java, agregue esta importación:
import com.facebook.react.BuildConfig;
fuente
BuildConfig.DEBUG
valor y hará que sus compilaciones de depuración ya no funcionen.Resuelve este problema de forma sencilla.
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'
fuente