React Native 发布应用程序因致命异常而崩溃:create_react_context

dar*_*izp 6 react-native react-native-android

我为我的发布应用程序创建签名,将它们放入内部android/app/android/app/build.gradle执行以下操作:

signingConfigs {
    release {
            keyAlias 'my-key-alias'
            keyPassword 'mypassword'
            storeFile file('mykeystore.keystore')
            storePassword 'mypassword'
        }
}
Run Code Online (Sandbox Code Playgroud)

在 buildTypes 中:

buildTypes {
    release {
            signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            firebaseCrashlytics {
                nativeSymbolUploadEnabled true
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

当我运行react-native run-android --variant=release该应用程序时,它已成功安装在我的模拟器上,但是当我打开它时,它崩溃了!我在 Android Studio 中打开了 logcats,这是打印出来的:

--------- beginning of crash
2020-08-12 18:53:51.069 5909-5957/? E/AndroidRuntime: FATAL EXCEPTION: create_react_context
    Process: com.encarti.mobile.worker, PID: 5909
    java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libhermes.so
        at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:789)
        at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:639)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:577)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:525)
        at com.facebook.hermes.reactexecutor.HermesExecutor.<clinit>(HermesExecutor.java:20)
        at com.facebook.hermes.reactexecutor.HermesExecutorFactory.create(HermesExecutorFactory.java:29)
        at com.facebook.react.ReactInstanceManager$5.run(ReactInstanceManager.java:997)
        at java.lang.Thread.run(Thread.java:923)
Run Code Online (Sandbox Code Playgroud)

有些东西告诉我它与图书馆或其他东西有关。我react-native-config用于处理我的环境变量,我也在使用 Firebase,所以我有一个google-services.json内部android/app/. 我不知道还有什么可能导致错误!

提前感谢您的回答!

小智 3

这是由于启用Hermes.

couldn't find DSO to load: libhermes.so
Run Code Online (Sandbox Code Playgroud)

1 - 在构建应用程序之前始终清理您的 gradle 构建。

2 - 如果您使用自定义构建的变体 ex stagingRelease,请不要忘记在您的/app/build.gradle

if (enableHermes) {
    def hermesPath = "../../node_modules/hermes-engine/android/";
    debugImplementation files(hermesPath + "hermes-debug.aar")
    releaseImplementation files(hermesPath + "hermes-release.aar")
    stagingReleaseImplementation files(hermesPath + "hermes-release.aar")
} else {
    implementation jscFlavor
}
Run Code Online (Sandbox Code Playgroud)

  • 我禁用了 Hermes,在每次构建之前进行清理,但这种情况仍然会发生。 (7认同)