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

React Native Android打包时expo-modules-core的C++代码报错求助

解决EAS构建Android AAB时expo-modules-core的C++编译错误

问题背景

执行eas build --platform android构建Google Play用的AAB文件时,Gradle编译阶段出现如下错误:

/home/expo/workingdir/build/react/node_modules/expo-modules-core/android/src/main/cpp/JavaScriptModuleObject.cpp:148:28: error: no viable constructor or deduction guide for deduction of template arguments of 'weak_ptr'
auto weakConstructor = std::weak_ptr(constructor);

错误根源是代码使用了C++17的std::weak_ptr类模板推导特性,但构建环境不支持该特性,或依赖版本存在bug。以下是几种可行的解决方法:


方法1:升级expo-modules-core到修复版本

该问题大概率是expo-modules-core旧版本的已知bug,升级到最新稳定版即可解决:

  1. 查看当前依赖版本:
    npm list expo-modules-core
    # 或 yarn list expo-modules-core
    
  2. 升级到最新版:
    npm install expo-modules-core@latest
    # 或 yarn add expo-modules-core@latest
    
  3. 重新执行构建命令:
    eas build --platform android
    

方法2:用patch-package打本地补丁

如果升级无法解决,可通过patch-package修改依赖源码并生成持久化补丁:

  1. 安装patch-package:
    npm install patch-package --save-dev
    # 或 yarn add patch-package postinstall-postinstall --dev
    
  2. 找到node_modules/expo-modules-core/android/src/main/cpp/JavaScriptModuleObject.cpp文件,修改第148行:
    将
    auto weakConstructor = std::weak_ptr(constructor);
    
    替换为兼容所有C++标准的写法:
    auto weakConstructor = std::weak_ptr<decltype(constructor)::element_type>(constructor);
    
  3. 生成补丁文件:
    npx patch-package expo-modules-core
    
  4. 将生成的patches/expo-modules-core+[对应版本号].patch文件提交到版本控制,之后重新执行构建。

方法3:调整NDK版本以支持C++17

该错误可能是因为构建环境的NDK版本对C++17特性支持不足,可在项目中指定兼容的NDK版本:

  1. 打开android/build.gradle文件,在android块中添加NDK版本配置:
    android {
      // 其他已有配置...
      ndkVersion = "25.2.9519653" // 选择支持C++17的稳定NDK版本
    }
    
  2. 重新执行构建命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:01:11