Libc++_shared.so 标准库常见问题处理方案

问题描述

项目中依赖了 libc++_shared.so,在编译时会与融云 SDK 中依赖的 libc++_shared.so 发生冲突。

报错堆栈

2 files found with path 'lib/arm64-v8a/libc++_shared.so' from inputs: 
 - /{path1}/jni/arm64-v8a/libc++_shared.so  
 - /{path2}/transformed/jetified-im_libcore-5.x.x/jni/arm64-v8a/libc++_shared.so

path1 和 2 代表冲突路径,是由于项目与融云SDK中同时引入了 libc++_shared.so,导致冲突。

解决方案

方案一

  1. 项目中去掉libc++_shared.so;

  2. build.gradle 添加如下代码做去重:

       packagingOptions {
            pickFirst('lib/armeabi-v7a/libc++_shared.so')
            pickFirst('lib/arm64-v8a/libc++_shared.so')
            pickFirst('lib/x86/libc++_shared.so')
            pickFirst('lib/x86_64/libc++_shared.so')
        }
    

方案二(SDK 版本大于等于 5.6.1)

如果融云 SDK 中的 libc++_shared.so 不满足项目要求,并且需要剔除融云SDK中的 libc++_shared.so,使用此方案。

依赖融云 SDK 时,按照exclude方式排除 libc++_shared.so,如下:

implementation ("cn.rongcloud.sdk:im_lib:x.y.z")  { 
 exclude group: 'cn.rongcloud.sdk', module: 'cpp_shared'
}

// 如不使用Kit SDK,则下面代码可以不添加
implementation ("cn.rongcloud.sdk:im_kit:x.y.z")  { 
 exclude group: 'cn.rongcloud.sdk', module: 'cpp_shared'
}

更多支持

如有疑问,欢迎提交工单