我尝试将我的应用安装到Android L预览版英特尔凌动虚拟设备中,但失败了,错误:
INSTALL_FAILED_NO_MATCHING_ABIS
这是什么意思?
答案 0 :(得分:576)
INSTALL_FAILED_NO_MATCHING_ABIS
是您尝试安装具有本机库的应用程序时,它没有适用于您的cpu体系结构的本机库。例如,如果您为 armv7 编译了一个应用程序,并且正在尝试将其安装在使用 Intel 体系结构的模拟器上,则它将无效。
答案 1 :(得分:146)
INSTALL_FAILED_NO_MATCHING_ABIS是在您尝试安装具有本机库的应用程序时,它没有适用于您的cpu体系结构的本机库。例如,如果您为armv7编译了一个应用程序,并且正在尝试将其安装在使用英特尔架构的模拟器上,则它将无法工作。
在Visual Studio 2015上使用Xamarin。 通过以下方式解决此问题:
在"支持的体系结构"进行以下检查:
保存
编辑:据报道,此解决方案也适用于Visual Studio 2017。
编辑2 :据报道此解决方案也适用于 Visual Studio 2017 for Mac 。
答案 2 :(得分:82)
我发布了另一个帖子的答案,因为它对我来说效果很好,诀窍是增加对这两种架构的支持:
发布此信息是因为我无法找到直接答案,不得不查看几个不同的帖子以获取我想要的内容...
我可以使用x86 Accelerated(HAXM)模拟器,只需将其添加到我的Module的build.gradle脚本内部的android {}块:
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a'
universalApk true
}
}
运行(build)...现在输出文件夹中会有一个(yourapp)-x86-debug.apk。我确定有一种方法可以在运行时自动安装,但我只是启动我首选的HAXM模拟器并使用命令行:
adb install (yourapp)-x86-debug.apk
答案 3 :(得分:59)
如果您使用Genymotion,则需要Installing ARM Translation and GApps
答案 4 :(得分:33)
这确实是一个奇怪的错误,可能是由多索引您的应用程序引起的。要解决此问题,请在应用的 build.gradle 文件中使用以下块:
android {
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a'
universalApk true
}
}
...[rest of your gradle script]
答案 5 :(得分:11)
我知道这里有很多答案,但是TL; DR版本是这样的(如果您正在使用Xamarin Studio):
Options
Android Build
Advanced
标签x86
/ armeabi-v7a
/ armeabi
)答案 6 :(得分:7)
@ enl8enmentnow的评论应该是使用genymotion解决问题的答案:
如果你在Genymotion上遇到这个问题,即使使用ARM翻译器也是因为你正在创建像谷歌Nexus 10这样的x86虚拟设备。选择一个ARM虚拟设备,就像其中一个自定义平板电脑一样。
答案 7 :(得分:7)
这个解决方案对我有用。试试这个, 在应用的 build.gradle 文件
中添加以下行splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a'
universalApk true
}
}
答案 8 :(得分:6)
答案 9 :(得分:4)
这对我有用... Android> Gradle脚本> build.gradle(Module:app) 在android *中添加
android {
// compileSdkVersion 27
defaultConfig {
//
}
buildTypes {
//
}
// buildToolsVersion '27.0.3'
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a'
universalApk true
}
}
}
答案 10 :(得分:3)
在Android 8上:
apache.commons.io:2.4
它提供INSTALL_FAILED_NO_MATCHING_ABIS,尝试将其更改为2.5或2.6,它将起作用或将其注释掉。
答案 11 :(得分:3)
答案 12 :(得分:3)
我使用bitcoinJ库遇到此问题(org.bitcoinj:bitcoinj-core:0.14.7) 添加到build.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'
}
}
答案 13 :(得分:2)
在2017年视觉工作室社区版中,有时从Android选项中选择支持的ABI无效。
在这种情况下,请验证.csproj是否具有以下行,并且在相同的构建配置中没有重复的行。
<AndroidSupportedAbis>armeabi;armeabi-v7a;x86;x86_64;arm64-v8a</AndroidSupportedAbis>
为了编辑,
答案 14 :(得分:2)
通常情况下,要找出哪个库依赖项具有不兼容的ABI,
安装apk问题时,您可以尝试升级版本/删除/替换这些库以解决INSTALL_FAILED_NO_MATCHING_ABIS
答案 15 :(得分:2)
此问题针对 CPU 架构,并且您在 abi
文件夹中有一些 lib
。
转到 build.gradle
以获取您的 app module
并在 android
中阻止添加:
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a'
universalApk true
}
}
答案 16 :(得分:1)
对于Mac上的genymotion,我在安装apk时遇到了INSTALL_FAILED_NO_MATCHING_ABIS错误。
在我的项目中,没有任何&#34; APP_ABI&#34;但我相应地添加了它,它为这两种架构只构建了一个apk,但它有效。 https://stackoverflow.com/a/35565901/3241111
答案 17 :(得分:0)
这发生在我身上。我检查了SDK Manager,它告诉我我正在使用的那个有更新。我更新了它,问题就消失了。
答案 18 :(得分:0)
很晚了,但是碰到了这个。这是针对Xamarin.Android
的。确保您没有尝试在发布模式下进行调试。如果在发布模式下并尝试调试,我会得到完全相同的错误。只需从发行版切换到调试,就可以正确安装我的软件。
答案 19 :(得分:0)
基本上,如果您尝试了上面的所有操作,但仍然遇到相同的错误“因为我之前也遇到过此问题”,然后检查添加的哪个.jar或.aar或模块可能是使用ndk的一个库,而那个是不支持8.0(Oreo)+,同样,我正在使用Microsoft SignalR套接字库添加其.jar文件,后来我发现应用程序未安装在Oreo中,然后我删除了该库,因为当前它的git页面上没有解决方案,我去了再换一个。
因此,请检查您正在使用的库,并在急切需要的情况下进行搜索。
答案 20 :(得分:0)
就我而言,我需要下载该应用程序的x86版本。
答案 21 :(得分:0)
从Android 7(牛轧糖)迁移到Android 8(奥利奥)时,我遇到了这个问题。
我尝试了上面列出的几种方法,但不幸的是,没有任何效果。
因此,我将.apk文件更改为.zip文件,将其解压缩,然后找到 lib 文件夹,该文件位于该文件夹中 /x86_64/darwin/libscrypt.dylib ,删除这个我在我的 build.gradle 模块的android部分(即)
下添加了代码packagingOptions {
exclude 'lib/x86_64/darwin/libscrypt.dylib'
exclude 'lib/x86_64/freebsd/libscrypt.so'
exclude 'lib/x86_64/linux/libscrypt.so'
}
干杯问题解决了
答案 22 :(得分:0)
答案 23 :(得分:0)
以某种方式,这无缘无故地解决了这个问题。
./gradlew clean assemble
,然后安装该应用程序。
答案 24 :(得分:0)
以防万一,这可能会对像我这样的人有所帮助。
我在Unity 3D中也遇到了同样的问题。我正在尝试使用Android Studio中的模拟器。
因此,我在播放器设置中启用了Target Architecture->x86 Architecture
(尽管已弃用)并且有效!