如何解决Expo构建Android时expo-modules-core的CMake编译错误?
解决Expo Android构建中expo-modules-core编译失败及JS警告问题
一、搞定expo-modules-core的C++编译错误(std::weak_ptr模板推导失败)
- 升级expo-modules-core到适配版本:
直接在项目根目录执行npm install expo-modules-core@latest或yarn add expo-modules-core@latest,注意版本要和你的Expo SDK对应——比如SDK 49配~1.5.12,SDK 50配~1.11.1,避免版本不兼容。 - 清理Gradle缓存:
本地调试时,进入Android目录执行./gradlew clean;使用EAS构建的话,修改eas.json添加清理步骤:{ "build": { "production": { "android": { "gradleCommand": ":app:clean :app:assembleRelease" } } } } - 降级NDK版本:
若因NDK版本过高引发模板推导问题,在android/build.gradle中指定兼容版本:buildscript { ext { ndkVersion = "25.2.9519653" } }
二、处理JS打包阶段的警告(未声明变量、重复属性)
- 补全未声明变量:
针对警告里的变量逐个排查,用let/const提前声明,避免隐式全局变量;如果是第三方库导致的,添加/* global 变量名 */注释消除警告。 - 合并重复属性赋值:
检查代码中是否存在多次给同一对象设置相同属性的情况,合并为单次赋值;若为依赖库问题,尝试升级依赖版本,或在metro配置中忽略对应文件的警告。 - 开启严格模式提前排查问题:
在babel.config.js中添加严格模式插件,提前发现潜在问题:module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'], plugins: ['@babel/plugin-transform-strict-mode'] }; };
三、额外排查动作
- 重新同步依赖:
执行npm install或yarn install后,运行npx expo prebuild --clean重新生成Android原生文件,确保依赖同步到位。 - 检查SDK兼容性:
用npx expo doctor扫描依赖冲突,按照提示修复,保证所有包版本与当前Expo SDK匹配。
内容的提问来源于stack exchange,提问作者Karunaaharan Bavaram
相关产品推荐
相关产品推荐

