You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级compileSdkVersion至31后React Native Release构建失败

React Native 0.66.5 升级 compileSdkVersion 至31后Release构建失败

问题概述

将React Native 0.66.5项目的compileSdkVersion和targetSdkVersion升级到31后,执行./gradlew assembleRelease时抛出错误:

Execution failed for task ':app:bundleReleaseJsAndAssets'
Process 'command 'node'' finished with non-zero exit value 1

但yarn android可以正常构建Debug包并运行。

核心错误原因

从报错日志可定位,问题根源是Node.js版本与旧版Metro的加密哈希算法不兼容:

  • Metro在创建Transformer时触发ERR_OSSL_EVP_UNSUPPORTED错误,这是因为Node.js 17+版本默认启用了更严格的OpenSSL算法,而RN0.66配套的Metro版本不支持该算法。
  • 后续的Cannot read properties of undefined (reading 'transformFile')是该错误导致的连锁反应。

解决方案

方法1:临时注入兼容环境变量执行构建

在终端执行构建命令前,添加指定加密算法的环境变量:

# macOS/Linux
export NODE_OPTIONS=--openssl-legacy-provider && ./gradlew assembleRelease
# Windows
set NODE_OPTIONS=--openssl-legacy-provider && gradlew assembleRelease

方法2:配置package.json脚本简化构建

在项目根目录的package.json中添加Release构建脚本,自动携带环境变量:

"scripts": {
  // 保留原有脚本,新增以下内容
  "android:release": "NODE_OPTIONS=--openssl-legacy-provider ./gradlew assembleRelease"
}

之后只需执行yarn android:release或npm run android:release即可完成Release构建。

方法3:降级Node.js到兼容版本

RN0.66官方推荐Node.js版本范围为12.x-16.x,使用版本管理工具(如nvm)切换到16.x LTS版本:

# 安装并切换到Node.js 16
nvm install 16
nvm use 16

切换后直接执行./gradlew assembleRelease即可正常构建。

方法4:升级Metro依赖(需谨慎验证)

如果希望保留高版本Node.js,可以尝试升级Metro到兼容版本(注意RN0.66的兼容性):

  1. 修改package.json中的Metro相关依赖版本:
"metro": "^0.67.0",
"metro-core": "^0.67.0",
"metro-react-native-babel-transformer": "^0.67.0"
  1. 执行yarn install或npm install更新依赖,之后重新尝试构建。此方法可能引发其他兼容性问题,需全面测试。

内容的提问来源于stack exchange,提问作者Ravis Farooq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:21:01