前言
随着App功能增多,集成的so库也会增多,如果系统中多个so库都使用系统自动生成的libc++_shared.so库,如果多个SDK都有该so包,就会出现报错:
解决办法
如果出现该问题,说明您的项目中有多个SDK共同依赖了C++标准动态库,请在您的主程序build.gradle中增加以下代码:
android {
packagingOptions {
pickFirst 'lib/*/libc++_shared.so'
}
}
在Android Gradle插件中,packagingOptions
用于定义打包apk时的选项。其中,pickFirst
是一个针对冲突解决的策略之一。
具体来说,pickFirst
用于指定在打包时遇到冲突时使用哪个文件。当打包过程中出现同名的文件时,如果指定了pickFirst
,则会优先使用第一个找到的文件,而其他同名文件则会被忽略。
总结
网上还有别的方案:删除SDK中的libc++_shared.so文件,这种方式完全不可取,删除后会造成SDK无法编译,或者第三方SDK高度集成的根本无法删除,所以本解决方案才是最可取的。