Jenkins流水线构建Expo项目失败:configureCMakeRelWithDebInfo[arm64-v8a]任务出错
解决Expo集成项目Jenkins Docker构建cmake配置失败问题
问题背景
接手原生转Expo+React Native的项目,本地M1 Mac构建正常,但Jenkins Docker容器中构建时出现错误:
Execution failed for task ':expo-modules-core:configureCMakeRelWithDebInfo[arm64-v8a]'
仅附带提示Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8,执行unset JAVA_TOOL_OPTIONS无效。
解决思路
1. 强制覆盖JAVA_TOOL_OPTIONS而非仅unset
unset可能无法彻底清除容器启动时注入的环境变量,直接在Jenkins流水线的构建步骤中覆盖:
export JAVA_TOOL_OPTIONS="" ./gradlew assembleRelease
或者在Dockerfile中预先清除:
ENV JAVA_TOOL_OPTIONS=""
同时检查Jenkins全局配置中是否存在该变量,若有则删除。
2. 对齐CMake与NDK版本
本地M1环境的CMake/NDK版本需与Docker容器完全一致:
- 查看本地Android SDK的CMake版本(一般在
~/Library/Android/sdk/cmake) - 在Docker容器中安装对应版本的CMake,例如:
sdkmanager "cmake;3.22.1"
- 确保NDK版本匹配RN 0.72.4要求(建议25.2.9519653或兼容版本)
3. 排查架构适配问题
Docker容器若为x86_64架构,构建arm64-v8a目标可能存在模拟问题:
- 启用QEMU支持arm架构:
docker run --privileged --rm tonistiigi/binfmt --install all
- 先尝试构建x86_64目标验证:
./gradlew assembleRelease -Pandroid.buildTargetArch=x86_64
4. 提升构建日志详细度
默认日志未展示cmake配置的真实错误,添加参数获取详细日志:
./gradlew assembleRelease --info
重点查看configureCMakeRelWithDebInfo任务的报错细节,比如依赖缺失、路径错误等。
5. 同步依赖与缓存
Docker容器的依赖缓存可能与本地不一致:
- 清理依赖缓存后重新安装:
yarn cache clean && yarn install --frozen-lockfile
- 确保
expo-modules-core版本与yarn.lock/package-lock.json完全一致,避免缓存旧版本。
6. 调整Docker容器资源
CMake配置过程可能因资源不足失败:
- 增加Docker容器的内存分配(建议至少4GB)
- 在Jenkins流水线中设置容器资源限制,例如:
agent { docker { image 'your-android-image' args '-m 4g' } }
内容的提问来源于stack exchange,提问作者Alessandro Sperotti
相关产品推荐
相关产品推荐

