Docker容器内构建Expo Android应用时出现arm64-v8a无兼容库错误
我之前在Docker环境里构建Expo Android应用时也碰到过类似的CMake库找不到的问题,结合你的配置来看,大概率是Android SDK的NDK或CMake组件没装全,或者环境变量没配置对。你可以从以下几个方向逐步排查:
1. 确保安装了对应版本的NDK和CMake
React Native 0.74.x(你的项目用的这个版本)对NDK版本有明确要求,需要安装NDK 25.2.9519653以及兼容的CMake版本(比如3.22.1)。你当前的Dockerfile里只安装了Android命令行工具,但没包含NDK和CMake组件,这会导致原生模块编译时找不到arm64-v8a的库。
修改Dockerfile里的sdkmanager命令,添加NDK和CMake的安装:
yes | /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses \ && yes | /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --install "ndk;25.2.9519653" "cmake;3.22.1" "build-tools;34.0.0"
(顺便加上对应版本的build-tools,避免后续其他编译问题)
2. 配置NDK相关环境变量
安装完NDK后,需要在Dockerfile里设置ANDROID_NDK_HOME环境变量,让CMake能找到NDK的路径:
ENV ANDROID_NDK_HOME=/opt/android-sdk/ndk/25.2.9519653 ENV PATH=$PATH:$ANDROID_NDK_HOME:$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin
3. 检查Docker容器的架构兼容性
如果你的Docker主机是x86_64架构,但要构建arm64-v8a的包,需要确保NDK支持交叉编译(通常NDK默认支持),或者在运行容器时开启QEMU架构模拟(比如添加--platform linux/arm64参数启动容器)。不过EAS本地构建一般会自动处理交叉编译,先优先排查前面的NDK安装问题。
4. 暂时调整JAVA_TOOL_OPTIONS试试
你提到有人说_JAVA_OPTIONS可能影响,虽然你用的是JAVA_TOOL_OPTIONS,可以尝试在构建命令前临时取消这个设置,看是否能解决:
unset JAVA_TOOL_OPTIONS && eas build --profile development --platform android --local
如果取消后正常,再调整参数或者确认是否是IPv4设置导致的网络问题(比如构建时无法下载依赖库)。
5. 清理构建缓存
有时候缓存的旧构建文件会导致冲突,你可以在构建前清理本地缓存:
rm -rf node_modules .gradle .android eas-build-local-cache npm install
或者直接用EAS的清理选项:
eas build --profile development --platform android --local --clean
内容来源于stack exchange

