Apple M1芯片下React Native 0.64.1编译报错:mergeAlphaDebugNativeLibs
问题说明
- 运行环境:Apple M1芯片设备,React Native 0.64.1版本
- 编译报错:
FAILURE: Build failed with an exception.
- What went wrong:
Execution failed for task ':app:mergeAlphaDebugNativeLibs'.A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
More than one file was found with OS independent path 'lib/armeabi-v7a/libfbjni.so'. If you are using jniLibs and CMake IMPORTED targets, see https://developer.android.com/studio/preview/features#automatic_packaging_of_prebuilt_dependencies_used_by_cmake
- 无效尝试:在
app/build.gradle中添加packagingOptions的pickFirst规则后编译成功,但应用启动直接崩溃:
android { // 原有代码 packagingOptions { pickFirst '**/libc++_shared.so' pickFirst '**/libfbjni.so' } }
可行解决办法
1. 排除重复的fbjni依赖
先排查哪个第三方库引入了重复的fbjni,执行./gradlew app:dependencies查看依赖树,搜索fbjni相关条目。找到冲突依赖后,在app/build.gradle的dependencies块中添加exclude规则:
dependencies { // 示例:假设react-native-reanimated是冲突来源 implementation(project(':react-native-reanimated')) { exclude group: 'com.facebook.fbjni', module: 'fbjni-java-only' } }
2. 指定ABI过滤
在app/build.gradle中明确设置支持的ABI,减少架构层面的库冲突,同时适配M1环境:
android { // 原有代码 defaultConfig { ndk { abiFilters 'arm64-v8a', 'x86_64' } } }
RN 0.64+对arm64-v8a支持完善,M1模拟器默认用x86_64,指定这两个ABI基本能覆盖常用场景。
3. 彻底清理缓存后重建
- 清理RN缓存:
npx react-native clean
- 清理Android构建缓存:
cd android && ./gradlew clean
- 删除并重装依赖:
rm -rf node_modules && npm install
- 重新构建项目:
npx react-native run-android
4. 用Rosetta模式运行终端
M1芯片的架构兼容问题可能导致编译异常,右键点击终端应用→「显示简介」,勾选「使用Rosetta打开」,重启终端后再执行构建命令。
内容的提问来源于stack exchange,提问作者Shariq Ahmed -

