[INSTALL_FAILED_NO_MATCHING_ABIS:无法提取本机库,res=-113]

问题描述 投票:0回答:14

我对导入到我的项目的第三方库有疑问。

我读了很多相关文章,但没有得到任何如何正确处理它的信息。

我将我的类.so放入文件夹中。

问题是我尝试运行我收到的应用程序

[INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
android android-ndk
14个回答
122
投票

2019 年 7 月 25 日:

我在 Android Studio 3.0.1 中遇到了这个问题:

检查了很多帖子后,这是有效的Fix

转到模块 build.gradle 并在 Android 块中添加以下脚本:

splits {
    abi {
        enable true
        reset()
        include 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'arm64-v8a'
        universalApk true
    }
}

简单的解决方案。欢迎发表评论。谢谢。


24
投票

我在模拟器中遇到了同样的问题,但我是这样解决的:

使用 x86_64 系统映像(ABI)创建新的模拟器

select device

select x86_64

就是这样。

此错误表明系统(设备)无法运行该应用程序。

我希望这对某人有帮助。


14
投票

2018 年 9 月 13 日 当添加更多类型并使用 false 设置 universalApk 来减少 apk 大小时,它对我有用。

splits { abi { enable true reset() include 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'arm64-v8a' universalApk false } }
    

13
投票
如果您在使用 flutter 项目时遇到此错误,您可以在模块

build.gradle

Android block
 中添加以下代码,然后在 
defaultConfig
 块中添加以下代码。当我尝试构建 flutter apk 时发生此错误。 

android{ ... defaultConfig{ ... //Add this ndk block of code to your build.gradle ndk { abiFilters 'armeabi-v7a', 'x86', 'armeabi' } } }
    

10
投票

flutter clean

实际上对我有用


6
投票
Android 9 和 Android 11 模拟器支持 Arm 二进制文件。

https://developer.android.com/studio/releases/emulator#support_for_arm_binaries_on_android_9_and_11_system_images

我在使用 API 级别 29 的 x86 模拟器时遇到了同样的问题,尝试安装针对arm ABI的apk。

我尝试了 API 级别 30 的 x86 模拟器,效果很好。


4
投票
这是由于 gradle 依赖于某些过时的东西而导致错误。删除 gradle 依赖项,直到错误停止出现。对我来说,是:

implementation 'org.apache.directory.studio:org.apache.commons.io:2.4'
此行需要更新到较新的版本,例如:

api group: 'commons-io', name: 'commons-io', version: '2.6'
    

3
投票
我的应用程序在 Nexus 5X API 26 x86(模拟器上的虚拟设备)上运行,没有任何错误,然后我包含了第三方 AAR。然后就一直报这个错误。我清理、重建、选中/取消选中即时运行选项、擦除 AVD 中的数据、执行冷启动,但问题仍然存在。然后我尝试了

here找到的解决方案。他/她说,在模块 build.gradle 文件中添加“x86”、“armeabi-v7a”的 split 和 abi 块,哈利路亚,它又干净又新鲜了:)

编辑:在这个

post Driss Bounouar 的解决方案似乎是相同的。但在添加新的 AAR 之前我的模拟器是 x86,并且 HAXM 模拟器已经可以工作了。


2
投票
截至 2021 年 10 月 21 日,我通过将这些行添加到应用程序级别 build.gradle 来修复此问题

defaultConfig { ndk { abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'mips', 'mips64', 'arm64-v8a' } }
    

1
投票
任何人在使用 cmake build 时遇到此问题,解决方案是确保您已在应用程序模块的 android{} 块中包含四个受支持的平台:

externalNativeBuild { cmake { cppFlags "-std=c++14" abiFilters "arm64-v8a", "x86", "armeabi-v7a", "x86_64" } }
    

1
投票
对我有用的解决方案(2021 年 11 月)是在 build.gradle 文件中的打包选项中添加排除项。

android { packagingOptions { exclude("lib/**") } }
具体来说,extract() 部分必须是独立的,并且位于函数中,即使它可能显示为已弃用(在 IntelliJ 中有一条线穿过它)。这样问题就解决了。


0
投票
一段时间后,我调查并了解到我的库所在的路径是正确的。我只需要为不同的架构添加文件夹:

  • ARM EABI v7a 系统映像

  • Intel x86 Atom 系统映像

  • MIPS 系统映像

  • Google API


0
投票
使拆分依赖于与外部构建相同的 abis 列表。单一事实来源。

android { // ... defaultConfig { // ... externalNativeBuild { cmake { cppFlags "-std=c++17" abiFilters 'x86', 'armeabi-v7a', 'x86_64' } } } //defaultConfig splits { abi { enable true reset() include defaultConfig.externalNativeBuild.getCmake().getAbiFilters().toListString() universalApk true } } } //android
    

0
投票
就我而言,我在 Flutter 项目中遇到了同样的问题,我通过运行以下命令解决了这个问题:

flutter clean flutter run
    
© www.soinside.com 2019 - 2024. All rights reserved.