Android编译报错:mergeDebugNativeLibs任务因so库冲突执行失败
解决Android :app:mergeDebugNativeLibs的SO文件冲突问题
你遇到的是多个依赖库重复打包相同SO文件导致的合并冲突——单独处理其中一个SO只会让另一个的冲突暴露出来,需要同时针对两个冲突文件配置打包规则:
- 同时配置两个SO的打包优先级
在app模块的build.gradle文件中,更新packagingOptions,对libfbjni.so和libc++_shared.so同时设置pickFirst规则,覆盖所有受影响的CPU架构:
android { // 其他配置项... packagingOptions { // 处理armeabi-v7a架构的冲突 pickFirst 'lib/armeabi-v7a/libfbjni.so' pickFirst 'lib/armeabi-v7a/libc++_shared.so' // 如果其他架构(如arm64-v8a、x86、x86_64)也出现冲突,同步添加对应规则 pickFirst 'lib/arm64-v8a/libfbjni.so' pickFirst 'lib/arm64-v8a/libc++_shared.so' pickFirst 'lib/x86/libfbjni.so' pickFirst 'lib/x86/libc++_shared.so' pickFirst 'lib/x86_64/libfbjni.so' pickFirst 'lib/x86_64/libc++_shared.so' } }
打包时会自动选择每个架构下第一个出现的对应SO文件,避免重复文件冲突。
- 从根源消除重复依赖(可选但推荐)
如果想彻底解决而非绕过冲突,可以排查重复引入SO的依赖库:
- 执行命令查看app模块的完整依赖树:
./gradlew app:dependencies
- 在输出中搜索
fbjni或c++_shared相关条目,找到重复引入的依赖库,通过exclude语法移除其中一份重复依赖。比如发现库A和库B都引入了fbjni,可在依赖声明中排除:
implementation('com.example.library:A:1.0.0') { exclude group: 'com.facebook.fbjni', module: 'fbjni' }
内容的提问来源于stack exchange,提问作者Vaishnavi Maske
相关产品推荐
相关产品推荐

