Я только что обновил свой проект, чтобы использовать версию 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, но, к сожалению, ни одно из них не помогло мне. Предложите обходной путь.
android
react-native
V-Xtreme
источник
источник
Ответы:
У меня была такая же проблема после обновления с 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 находится в вашем корневом build.gradle.
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
источник
Я добавил этот блок в блок allProject в project_dir / build.gradle, и сбой исчез.
maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") }
Я создал новый проект с помощью init-native init и просмотрел файлы сборки Android. К счастью, это было первое отличие, которое я заметил и исправил свою проблему. Думаю, вы могли бы сделать то же самое, если это не сработает.
источник
error: package com.facebook.react.module.annotations does not exist
Я только что очистил папку сборки для Android, и после этого все заработало. Надеюсь, это поможет товарищу.
cd android ./gradlew clean
источник
например:
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 }
источник
pickFirst '**/libjsc.so' pickFirst '**/libc++_shared.so'
Если вы столкнулись с этой ошибкой при обновлении до версии React Native
0.62.2
:Добавьте в свой
android/app/build.gradle
файл следующее:dependencies { implementation 'com.facebook.soloader:soloader:0.9.0+'
как один из первых
implementation
записей.Решение взято отсюда
источник
я решил это, добавив
configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.8.2" } }
источник
app/build.gradle
inside end ofdependencies { }
dependencies { implementation project(':react-native-permissions') configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.8.2" } } }
Для тех, кто сталкивается с этой проблемой, есть 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() } }
источник
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() } }
источник
Больше я ничего не делал.
./gradlew clean
решил мою проблему.источник
После безуспешного следования всем советам я создал * .apk вместо * .aab. Размер APK составляет 16 МБ, а не AAB 8 МБ, но я наконец избавился от UnsatisfiedLinkError.
Чтобы построить AAB (сбой с UnsatisfiedLinkError):
cd android && ./gradlew clean && ./gradlew bundleRelease
Чтобы собрать APK (без сбоев, и Hermes тоже отлично работает):
cd android && ./gradlew clean && ./gradlew assembleRelease
источник
В моем случае Hermes никогда не был включен, но я столкнулся с этой ошибкой. Очистка (через Android Studio) и восстановление устранили ошибку.
источник
./gradlew clean
разница между очисткой через Android Studio и через ?Попробуйте заменить свой объект ndk внутри app / build.gradle
defaultConfig { ... ndk { abiFilters "armeabi-v7a", "x86" } }
источник
У меня была эта ошибка, когда я пытался запустить более старую версию React Native до 0.60, в то время как в ней
package.json
была определена более новая версия (сообщение 0.60).источник
Это случается со мной после того, как я обновил свою студию Android, затем я снова чищу и строю, она больше не вылетает.
источник
Это потому, что SOLoader отсутствует.
Обеспечить
implementation'com.facebook.soloader:soloader:0.9.0+'
добавлен в зависимости в android / app / build.gradlle
очисти свою сборку
cd android
./gradlew clean
Попробуйте связать
./gradlew bundleRelease
Выйти из папки Android
cd ../
Попробуйте бежать
npx react-native run-android --variant=release
источник
В моем случае, просто поверните
enableHermes
дальше вapp/build.gradle
:project.ext.react = [ entryFile : "index.js", enableHermes: true, // HERE! ]
источник
Решите эту проблему простым способом.
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'
источник
Если кто-то все еще сталкивается с проблемой даже после выполнения всех вышеперечисленных шагов, вот решение.
В MainApplication.java добавьте этот импорт:
import com.facebook.react.BuildConfig;
источник
BuildConfig.DEBUG
значение и ваши отладочные сборки больше не будут работать.