我试图将我的应用程序安装到Android L预览英特尔Atom虚拟设备,它失败了,错误:

INSTALL_FAILED_NO_MATCHING_ABIS

这是什么意思?


当前回答

我有这个问题使用bitcoinJ库(org.bitcoinj: bitcoinJ -core:0.14.7) 添加到构建。Gradle(在模块应用程序中)在android范围内打包选项。 它帮助了我。

android {
...
    packagingOptions {
        exclude 'lib/x86_64/darwin/libscrypt.dylib'
        exclude 'lib/x86_64/freebsd/libscrypt.so'
        exclude 'lib/x86_64/linux/libscrypt.so'
    }
}

其他回答

INSTALL_FAILED_NO_MATCHING_ABIS是当你试图安装一个有本机库的应用程序,而它没有适合你的cpu架构的本机库时。例如,如果你为armv7编译了一个应用程序,并试图将其安装在使用英特尔架构的模拟器上,它将无法工作。

嗨,如果你正在使用这个库;

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

替换为:

implementation 'commons-io:commons-io:2.6'

问题会得到解决。

这个问题是针对CPU架构的,你在lib文件夹中有一些abi。

去建造。Gradle为你的应用模块,在android,块添加这个:

  splits {
            abi {
                enable true
                reset()
                include 'x86', 'armeabi-v7a'
                universalApk true
            }
        }

一般情况下,要找出哪个库依赖具有不兼容的ABI,

在Android Studio中构建APK文件(菜单build > build Bundle(s)/APK(s) > build APK(s)) // actual于01.04.2020 重命名APK文件,将扩展名“APK”替换为“zip” 解压缩文件到一个新文件夹 进入libs文件夹 找出带有不兼容的abi的*.jar库

您可以尝试升级版本/删除/替换这些库来解决安装apk时INSTALL_FAILED_NO_MATCHING_ABIS问题

我从另一个帖子中发布了一个答案,因为它对我来说很有效,诀窍是添加对两种架构的支持:

发布这篇文章是因为我找不到一个直接的答案,不得不看看几个不同的帖子来得到我想要的东西……

我能够使用x86加速(HAXM)模拟器,只需将其添加到我的模块构建中。gradle脚本在android{}块内:

splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi-v7a'
            universalApk true
        }
    }

运行(构建)…现在在你的输出文件夹中会有一个(yourapp)-x86-debug.apk。我确信有一种方法可以在运行时自动安装,但我只是启动我首选的HAXM模拟器并使用命令行:

adb install (yourapp)-x86-debug.apk