我刚刚将项目更新为使用本机版本 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 :(得分:22)
我刚刚清理了android的build文件夹,然后,它运行良好。希望能帮助交配。
Authtoken
答案 1 :(得分:9)
例如:
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
}
答案 2 :(得分:8)
如果在更新到React Native版本0.62.2
时遇到此错误:
将以下内容添加到您的android/app/build.gradle
文件中:
dependencies {
implementation 'com.facebook.soloader:soloader:0.9.0+'
作为前implementation
个条目之一。
答案 3 :(得分:7)
我已经通过添加
解决了此问题 configurations.all {
resolutionStrategy {
force "com.facebook.soloader:soloader:0.8.2"
}
}
答案 4 :(得分:4)
将此添加到您的项目级别Gradle中
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()
}
}
答案 5 :(得分:3)
我什么也没做。 ./gradlew clean
解决了我的问题。
答案 6 :(得分:2)
从0.59.8升级到0.60.4后,我遇到了同样的问题
请确保已在 app / build.gradle 中添加了所有这些行,尤其是 dependencies 部分,因为这可以确保您具有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) {
def hermesPath = "../../node_modules/hermesvm/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
答案 7 :(得分:2)
就我而言,我需要为每个 android 风格添加 Hermes 路径
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
qaImplementation files(hermesPath + "hermes-release.aar")
stageImplementation files(hermesPath + "hermes-release.aar")
prodImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
答案 8 :(得分:2)
在遵循所有建议但没有成功之后,我构建了一个* .apk而不是一个* .aab。 APK是16 MB,而不是8 MB AAB,但是我终于摆脱了UnsatisfiedLinkError。
要构建AAB(因UnsatisfiedLinkError而崩溃):
cd android && ./gradlew clean && ./gradlew bundleRelease
要构建APK(也不会崩溃,爱马仕也能正常工作):
cd android && ./gradlew clean && ./gradlew assembleRelease
答案 9 :(得分:0)
尝试在app / build.gradle内替换您的ndk对象
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
答案 10 :(得分:0)
就我而言,从未启用过爱马仕,但我遇到了此错误。清理(通过Android Studio)并重建可解决该错误。
答案 11 :(得分:0)
当我尝试在0.60之前的较早版本的React Native上运行时出现此错误,而在package.json
中定义了较新的版本(0.60版)。
答案 12 :(得分:0)
就我而言,只需在enableHermes
中打开app/build.gradle
:
project.ext.react = [
entryFile : "index.js",
enableHermes: true, // HERE!
]
答案 13 :(得分:0)
在我更新android studio之后,它发生在我身上,然后我再次清理并构建,它不再崩溃了。
答案 14 :(得分:0)
对于遇到此问题的其他人,有两个部分看起来相似。您需要更新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()
}
}
答案 15 :(得分:0)
这是因为缺少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
答案 16 :(得分:0)
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
&
确保您已安装此 - https://www.npmjs.com/package/jsc-android
就我而言,由于某种原因它不在那里。
答案 17 :(得分:0)
我将此块添加到project_dir / build.gradle的allProject块中,崩溃消失了。
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
我所做的是使用react-native init创建一个新项目,并通过了android构建文件。幸运的是,这是我注意到并解决了我的问题的第一个区别。我想如果这样做不行,您也可以这样做。
答案 18 :(得分:0)
为了避免这种意外行为,我选择在我的所有项目中使用 fastlane(非常容易实现和使用)。每次寻找新版本时,我都会创建一个短通道来清理项目。
lane :clean do
gradle(
task: "clean"
)
end
然后我在我的生产通道命令中使用这个通道
lane :release do
check_env
bump
...
clean
gradle(
task: 'bundle',
build_type: 'Release'
)
end
答案 19 :(得分:-1)
以简单的方式解决此问题。
<agm-map [latitude]="latitide" [longitude]="langtitude" [zoom]="zoom">
</agm-map>
答案 20 :(得分:-2)
如果尝试了上述所有步骤后,仍然有任何问题,那么这里就是解决方法
在MainApplication.java中,添加以下导入:
import com.facebook.react.BuildConfig;