React Native 0.69.1新架构打包configureBuildForHermes任务失败如何解决
问题现象
启用新架构的React Native 0.69.1版本执行Android打包操作时,抛出org.gradle.api.tasks.TaskExecutionException异常,提示任务:ReactAndroid:hermes-engine:configureBuildForHermes执行失败,构建日志同时输出CMake策略相关弃用警告,关键报错片段如下:
> Task :ReactAndroid:hermes-engine:configureBuildForHermes FAILED CMake Deprecation Warning at CMakeLists.txt:42 (cmake_policy): The OLD behavior for policy CMP0026 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD.
注:日志中显示的CMP0026策略弃用警告在高版本CMake环境下会直接被判定为构建错误,是导致该任务失败的核心原因,而非单纯提示信息。
排查解决步骤
- 优先校验CMake版本兼容性
React Native 0.69.1的Hermes编译逻辑未适配3.24及以上版本CMake,高版本CMake会强制废弃CMP0026策略的OLD行为,直接中断构建流程。
操作方式:打开Android Studio的SDK Manager,进入SDK Tools面板,卸载已安装的3.24+版本CMake,勾选安装3.22.1版本CMake;随后在项目根目录android/build.gradle中强制指定匹配的编译版本:buildscript { ext { // 保留原有其他配置项 cmakeVersion = "3.22.1" ndkVersion = "21.4.7075529" } } - 临时修改Hermes编译配置(不想降级CMake时使用)
进入项目依赖目录,找到node_modules/react-native/ReactAndroid/hermes-engine/CMakeLists.txt文件,定位到第42行的策略配置,将原有的cmake_policy(SET CMP0026 OLD)修改为cmake_policy(SET CMP0026 NEW)即可跳过该报错。由于node_modules目录下的修改会在重新安装依赖后失效,可使用patch-package工具将该改动持久化为项目补丁。 - 清理构建缓存后重试
版本配置修正后,依次执行以下命令清理残留缓存,再重新发起打包:# 进入android目录清理gradle构建缓存 cd android && ./gradlew clean # 返回项目根目录清理metro缓存 cd .. && npx react-native start --reset-cache - 校验新架构相关配置冲突
检查android/gradle.properties中的配置项:- 确认
newArchEnabled=true时,项目引入的第三方原生库均已适配新架构,未适配的旧原生库会干扰Hermes的编译流程 - 确认
hermesEnabled=true,不存在JSC引擎和Hermes切换后的残留配置 - 确认NDK版本为21.4.7075529,不要使用24及以上高版本NDK
- 确认
内容的提问来源于stack exchange,提问作者Muhammad Rafeh Atique
相关产品推荐
相关产品推荐

