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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:20:26