go to index

react native 提示 "bundleReleaseJsAndAssets non-zero exit " 错误的解决办法

read time 2 min read
react native Hermes

简介

在打包 React Native APK 时,可能会遇到以下错误提示:

plaintext
Execution failed for task ':app:bundleReleaseJsAndAssets'.
Process 'command '../../node_modules/hermes-engine/linux64-bin/hermes'' finished with non-zero exit value 2

Error: Command failed: ./gradlew app:installRelease -PreactNativeDevServerPort=8081

/xxxx/android/app/build/generated/assets/react/release/index.android.bundle:1:1: error: Invalid UTF-8 continuation byte �� ���
/xxxx/android/app/build/generated/assets/react/release/index.android.bundle:1:1: error: unrecognized Unicode character \ufffd �� ���
...

错误原因

根据 React Native 官方文档 的说明,如果你使用了 Hermes JS 引擎,则不应启用 RAM Bundles 功能。Hermes 在加载字节码时使用 mmap 确保整个文件不会被加载,而 RAM Bundles 与此机制不兼容,可能会导致问题。

如果你使用 Hermes JS 引擎,你不应启用 RAM Bundles 功能。在 Hermes 中,加载字节码时,mmap 确保整个文件不会被加载。使用 Hermes 与 RAM Bundles 可能会导致问题,因为这些机制是不兼容的。

解决办法

方法一:关闭 RAM Bundles 配置

注释掉或删除 app/build.gradle 文件中的 RAM Bundles 相关配置:

groovy
// bundleCommand = "ram-bundle"
// extraPackagerArgs = ["--indexed-ram-bundle"]

方法二:关闭 Hermes JS 引擎

如果不需要使用 Hermes,可以在 android/app/build.gradle 文件中禁用它:

groovy
project.ext.react = [
    entryFile: "index.js",
    enableHermes: false  // 禁用 Hermes 引擎
]

验证配置

  1. 清理构建缓存

    bash
    cd android
    ./gradlew clean
    
  2. 重新打包 APK

    bash
    npx react-native run-android --variant=release