Flutter集成agora_rtc_engine插件时执行mergeDebugNativeLibs任务失败(重复libaosl.so文件)
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
A failure occurred while executing com.android.build.gradle.internal.tasks.MergeNativeLibsTask$MergeNativeLibsTaskWorkAction
2 files found with path 'lib/arm64-v8a/libaosl.so' from inputs:
/Users/i-lanamtechnologies/.gradle/caches/8.11.1/transforms/2357939aaf75b7f859b9c7cb5d4e6444/transformed/jetified-agora-rtm-2.2.1/jni/arm64-v8a/libaosl.so
/Users/i-lanamtechnologies/.gradle/caches/8.11.1/transforms/29302f137b0c7a19cb642ff879fa4bc1/transformed/jetified-aosl-1.2.13.1/jni/arm64-v8a/libaosl.so
If you are using jniLibs and CMake IMPORTED targets, see https://developer.android.com/r/tools/jniLibs-vs-imported-targets
我太懂这种Native库冲突的糟心了——你已经试过调整agora_rtc_engine版本、升级Flutter、更新Gradle配置,但还是卡在这里。别着急,咱们从冲突的根源(重复的libaosl.so文件)入手,一步步解决:
1. 给packagingOptions补上冲突so的优先选择规则
你已经配置了libc++_shared.so的pickFirst规则,但漏掉了引发冲突的libaosl.so。直接在**app模块的build.gradle**里把这个文件加入规则,告诉Gradle遇到重复时取第一个找到的版本即可:
android { // 保留你原有的其他配置 packagingOptions { pickFirst 'lib/x86/libc++_shared.so' pickFirst 'lib/x86_64/libc++_shared.so' pickFirst 'lib/armeabi-v7a/libc++_shared.so' pickFirst 'lib/arm64-v8a/libc++_shared.so' // 新增针对libaosl.so的规则,覆盖所有CPU架构 pickFirst 'lib/arm64-v8a/libaosl.so' pickFirst 'lib/armeabi-v7a/libaosl.so' pickFirst 'lib/x86/libaosl.so' pickFirst 'lib/x86_64/libaosl.so' } sourceSets { main { jniLibs { useLegacyPackaging = true } } } }
2. 彻底清理项目缓存,避免残留干扰
Gradle的缓存有时候会“记仇”,哪怕改了配置也会用旧的依赖文件。执行这几条命令清干净:
# 清理Flutter项目的本地缓存 flutter clean # 进入Android目录,清理Gradle缓存并强制刷新所有依赖 cd android ./gradlew clean build --refresh-dependencies
完成后回到项目根目录,重新运行flutter run试试。
3. 排查重复的依赖引入
从错误日志看,冲突来自agora-rtm-2.2.1和aosl-1.2.13.1两个包:
- 先打开你的
pubspec.yaml,检查有没有直接引入aosl相关的Flutter插件,如果有的话,暂时注释掉这个插件,再运行项目——如果冲突消失,说明这个插件和agora_rtc_engine的依赖树有重叠,你需要找两者兼容的版本组合。 - 如果没有直接引入aosl插件,那大概率是
agora_rtc_engine的依赖链间接拉了aosl,而你项目里的其他依赖也拉了不同版本的aosl。这种情况可以在**项目根目录的android/build.gradle**里强制所有依赖使用同一个版本的aosl/agora-rtm:
allprojects { repositories { // 你的仓库配置(如maven、jcenter等) } configurations.all { resolutionStrategy { // 强制所有依赖使用指定版本的aosl force 'io.agora.aosl:aosl:1.2.13.1' // 或者如果是agora-rtm的版本问题,强制锁定其版本 force 'io.agora.rtm:agora-rtm:2.2.1' } } }
4. 尝试切换到agora_rtc_engine的特定兼容版本
你提到已经降级过插件,但可以试试更精准的版本——比如和你的Flutter 3.32.2完全匹配的官方推荐版本,比如6.4.0或6.3.0。替换pubspec.yaml里的版本号后,执行flutter pub get,再配合清理缓存的操作。
如果以上方法都不行,再检查一下项目里有没有手动添加的jniLibs目录,里面是不是也放了libaosl.so,如果有的话删掉即可。
内容来源于stack exchange

