解决多SO文件路径冲突后遇INSTALL_FAILED_NO_MATCHING_ABIS安装错误求助
咱们一步步拆解你遇到的这串连锁问题,帮你彻底理清根源并解决:
1. 先理解前两个重复SO文件的报错
你最开始碰到的:
error: More than one file was found with OS independent path 'lib/armeabi-v7a/libopencv_java3.so'
以及后续的:
error: More than one file was found with OS independent path 'lib/armeabi-v7a/libMyLibs.so'
本质都是项目中多个模块/第三方依赖包含了同路径、同名称的Native库文件,Gradle构建时无法确定应该选用哪一个,因此抛出冲突错误。你添加packagingOptions里的pickFirst规则确实能让构建通过,但这只是“强行选择第一个找到的文件”,可能埋下后续的隐患——比如你选的那个SO文件可能不兼容目标设备的架构。
2. 核心错误:INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113
这个报错的意思非常明确:你的应用打包的Native库(.so文件)的CPU架构(ABI),和你要安装的设备的CPU架构不匹配。
常见的触发场景有这几种:
- 你只打包了
armeabi-v7a(32位ARM)的SO文件,但测试设备是arm64-v8a(64位ARM)、x86或x86_64架构; - 反过来,你打包了64位架构的SO,但设备是32位的;
- 用
pickFirst处理冲突时,不小心排除了设备需要的架构对应的SO文件; - 某个第三方依赖只提供了特定架构的SO,而你没有在项目中适配该架构。
3. 针对性解决步骤
步骤1:确认目标设备的ABI架构
先搞清楚你的测试设备支持什么架构,最简单的方式是用ADB命令:
adb shell getprop ro.product.cpu.abi
执行后会返回设备的主ABI(比如arm64-v8a或x86)。
步骤2:统一项目的ABI支持范围
在app模块的build.gradle中,明确指定项目支持的ABI,确保覆盖你的测试设备:
android { defaultConfig { ndk { // 保留你需要的架构,下面这几个覆盖主流设备 abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } }
这样Gradle构建时只会打包你指定的这些架构的SO文件,避免引入不必要的架构文件,同时确保和设备兼容。
步骤3:排查并修复SO文件冲突的根源
不要依赖pickFirst强行解决冲突,最好找到重复SO的来源:
- 检查自己项目的
libs目录,是不是手动放入了和第三方依赖重复的SO文件?如果是,删掉手动放入的,改用依赖库的方式引入; - 查看第三方依赖的依赖树,执行
./gradlew app:dependencies,看看是不是多个依赖都引入了同一个Native库,尝试排除其中重复的依赖。
步骤4:清理缓存并重建项目
有时候旧的构建缓存会导致奇怪的问题,执行以下命令清理后再重新构建:
./gradlew clean ./gradlew assembleDebug
然后再尝试安装到设备上。
内容的提问来源于stack exchange,提问作者jojaba

