2024/12/18 15:46:47
如何处理同时集成 RTM SDK 和 RTC SDK 遇到库冲突问题?
问题描述
如果你通过 CDN 直接下载并同时集成 4.5.0 或以上版本的 RTC SDK 和 2.2.0 或以上版本的 RTM SDK,IDE 中可能出现如下报错:
-
Android:
Shellcom.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'lib/x86/libaosl.so'
-
iOS/macOS:
ShellUnexpected duplicate tasks:
Multiple commands produce '<your_app_build_path>/Contents/Frameworks/aosl.framework'ShellThe 'XXX' target has duplicate frameworks with the name 'aosl.xcframework'
问题原因
4.5.0 及以上版本的 RTC SDK 和 2.2.0 及以上的 RTM SDK 都用到了一个相同的库:
- Android:
libaosl.so
- iOS/macOS:
aosl.xcframework
- Windows:
libaosl.dll
所以 IDE 在构建过程中会提示存在多个具有相同路径的文件。
解决方案
1. 明确库的版本
比较 RTC 和 RTM aosl
库的版本信息,保留版本较高的库文件。版本信息见 RTC 发版说明和 RTM 发版说明。
2. 删除版本较低的库
确认库的版本信息后,删除 RTC 或 RTM SDK 包中版本较低的库文件,然后再重新构建项目。
- RTC SDK
- RTM SDK
如果你的项目中 RTC SDK 包中的 aosl
库版本较低,你可以根据目标平台来删除 SDK 包中的 aosl
库文件:
- Android 平台:删除 SDK 包中版本较低的
libaosl.so
文件。 - iOS/macOS 平台:删除 SDK 包中版本较低的
aosl.xcframework
文件。 - Windows 平台:删除 SDK 包中版本较低的
libaosl.dll
文件。
如果你的项目中 RTM SDK 包中的 aosl
库版本较低,你可以选择下列任意一种方式来操作:
方案一:升级 RTM SDK 版本并集成轻量库
如果你使用的 RTM SDK 版本低于 2.2.2,我们推荐你将 RTM SDK 升级至 2.2.2 或以上版本。从 2.2.2 开始 RTM SDK支持 subspec
(iOS)和轻量级 maven 仓库(Android),通过如下方式升级 SDK 版本即可解决库冲突问题:
-
通过 Maven 或 CocoaPods 升级版本并集成轻量库
- Java SDK:
Groovy// ...
dependencies {
// 如果你使用的是 2.2.2 或之后版本的 RTM SDK,且项目中同时使用了 RTC SDK v4.5.0 或以上版本
// 将 x.y.z 替换为具体的 SDK 版本号,如 2.2.2
// 可通过发版说明获取最新版本号
implementation 'io.agora:agora-rtm-lite:x.y.z'
}- Objective-C SDK:
Rubyplatform :ios, '11.0'
target 'Your App' do
# 如果你使用的是 2.2.2 或之后版本的 RTM SDK,且项目中同时使用了 RTC SDK v4.5.0 或以上版本
# 将 x.y.z 替换为具体的 SDK 版本号,如 2.2.0
# 可通过发版说明获取最新版本号
pod 'AgoraRtm', 'x.y.z', :subspecs => ['RtmKit']
end -
清理并重新构建项目。
方案二:手动删除文件
-
Java SDK:删除 SDK 包中如下文件:
lib/x86/libaosl.so
lib/x86_64/libaosl.so
lib/armeabi-v7a/libaosl.so
lib/arm64-v8a/libaosl.so
-
Objective-C SDK:删除 SDK 包中
libs/aosl.xcframework
文件。