简介
在打包 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 引擎
]
验证配置
清理构建缓存:
bashcd android ./gradlew clean
重新打包 APK:
bashnpx react-native run-android --variant=release