【问题标题】:[INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113][INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
【发布时间】:2016-07-24 16:15:25
【问题描述】:

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

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

我把我的类 .so 放到文件夹中。

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

[INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

【问题讨论】:

  • 试试这个链接:android 3.0.1stackoverflow.com/a/49473570/3400991
  • 我在模拟器上安装发布 apk 时遇到了同样的问题。就我而言,对我有用的是在真实设备上安装发布 apk :) 希望它也对其他人有所帮助

标签: android android-ndk


【解决方案1】:

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
    }
}

简单的解决方案。随意发表评论。谢谢。

【讨论】:

  • 它将创建适用于每种类型的 apk(release.apk、armeabi-v7a-release.apk、universal-release.apk、x86-release.apk)检查您是否使用 jniLibs 文件夹,通常这就是产生问题的原因
  • 你也可以添加 include ,'x86_64'
  • 有同样的错误。但也在 Gradle 中添加这个( splits{... )没有任何改变!
  • 我在将我的项目运行到模拟器 x86 时遇到了这个问题。这个解决方案可以无缝运行
  • universalApk 是我更新到最新 gradle [React Native] 后的关键
【解决方案2】:

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

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

select device

select x86_64

就是这样。

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

我希望这对某人有所帮助。

【讨论】:

  • 谢谢!这让我意识到我正在尝试在 x86 图像上运行 x86_64 apk。
【解决方案3】:

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

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

【讨论】:

  • @IgorGanapolsky 减少生成apks的时间,我不需要universalApk
  • ndk - abiFilterssplits - abi 冲突,除非 splits - abi - universalApk 设置为 false 否则不会抛出!无论如何,不​​要同时使用两种选项类型!
【解决方案4】:

如果您在使用 Flutter 项目时遇到此错误,您可以在模块 build.gradleAndroid block 中添加以下代码,然后在 defaultConfig 块中添加以下代码。当我尝试构建颤振 apk 时发生此错误。

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

【讨论】:

  • @warning - ndk - abiFilterssplits - abi 冲突,除非 splits - abi - universalApk 设置为 false 否则不会抛出!不要同时使用两者!
  • ndk { abiFilters "armeabi", "x86", "armeabi-v7a","x86_64", "mips", "mips64", "arm64-v8a" } 为我工作
  • 我在尝试从游戏库 LibGDX 安装 apk 时看到此错误。它使用 NDK 资源。这三行是修复,谢谢!
【解决方案5】:

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 模拟器,它运行良好。

    【讨论】:

    【解决方案7】:

    我的应用在 Nexus 5X API 26 x86(模拟器上的虚拟设备)上运行,没有任何错误,然后我添加了第三方 AAR。然后它一直给出这个错误。我清理,重建,选中/取消选中即时运行选项,擦除 AVD 中的数据,执行冷启动,但问题仍然存在。然后我尝试了找到here 的解决方案。他/她说将“x86”、“armeabi-v7a”的拆分和 abi 块添加到模块 build.gradle 文件中,哈利路亚它又干净又新鲜了 :)

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

    【讨论】:

      【解决方案8】:

      一段时间后,我调查并了解该路径位于我的库是正确的。我只需要为不同的架构添加文件夹:

      • ARM EABI v7a 系统映像

      • 英特尔 x86 Atom 系统映像

      • MIPS 系统映像

      • Google API

      【讨论】:

      • 添加文件夹,在哪里?
      【解决方案9】:

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

      implementation 'org.apache.directory.studio:org.apache.commons.io:2.4'
      

      此行需要更新为较新的版本,例如:

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

      【讨论】:

      • 这正是我的情况,谢谢你拯救了一天
      【解决方案10】:

      任何人在使用 cmake 构建时遇到此问题,解决方案是确保您在应用模块的 android{} 块中包含四个支持的平台:

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

      【讨论】:

        【解决方案11】:

        使拆分依赖于与外部构建相同的 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
        

        【讨论】:

        • 试过但仍然收到错误消息 failed to install parse error string message
        【解决方案12】:

        截至 2021 年 10 月 21 日,我通过将这些行添加到应用级别 build.gradle 来解决此问题

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

        【讨论】:

          【解决方案13】:

          对我有用的解决方案(2021 年 11 月)是向 build.gradle 文件中的 packagingOptions 添加排除项。

          android {
              packagingOptions {
                  exclude("lib/**")
              }
          }
          

          特别是 exclude() 部分必须是独立的并且在函数中,即使它可能显示为已弃用(在 IntelliJ 中有一条线穿过它)。这将解决问题。

          【讨论】:

            猜你喜欢
            • 2018-09-11
            • 1970-01-01
            • 2019-06-13
            • 2018-11-07
            • 2018-09-19
            • 2020-08-04
            • 2020-03-19
            • 2015-01-21
            • 2022-12-02
            相关资源
            最近更新 更多