安装apk时INSTALL_FAILED_NO_MATCHING_ABIS

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

INSTALL_FAILED_NO_MATCHING_ABIS

这是什么意思?

INSTALL_FAILED_NO_MATCHING_ABIS是当您尝试安装具有本机库的应用程序时,并且它没有用于您的cpu体系结构的本机库。 例如,如果您为armv7编译了一个应用程序,并试图将其安装在使用Intel体系结构的模拟器上,则无法工作。

如果您使用Genymotion,则需要安装ARM翻译和GApps

我发布了来自另一个线程的答案,因为这对我来说很合适,诀窍是添加对这两种体系结构的支持:

发布这个,因为我找不到直接的答案,不得不看几个不同的职位,以得到我想做的事情…

我能够使用x86加速(HAXM)模拟器,只需将其添加到我的模块的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 

INSTALL_FAILED_NO_MATCHING_ABIS是当您尝试安装具有本机库的应用程序时,并且它没有用于您的cpu体系结构的本机库。 例如,如果您为armv7编译了一个应用程序,并试图将其安装在使用Intel体系结构的模拟器上,则无法工作。

在Visual Studio 2015上使用Xamarin。通过以下方法解决此问题:

  1. 打开你的xamarin .sln
  2. 右键单击您的Android项目
  3. 点击属性
  4. 点击Android选项
  5. 点击“高级”标签
  6. 在“支持的体系结构”下,选中以下选项:

    1. armeabi-V7A
    2. 86
  7. 保存

  8. F5(build)

编辑:这个解决scheme也被报告为Visual Studio 2017的工作。

这实际上是一个奇怪的错误,可以通过多重索引您的应用程序。 为了解决这个问题,在应用程序的build.gradle文件中使用下面的代码块:

 android { splits { abi { enable true reset() include 'x86', 'armeabi-v7a' universalApk true } } ...[rest of your gradle script] 

我知道这里有很多答案,但TL; DR版本是这样的(如果你使用的是Xamarin Studio):

  1. 在解决scheme树中右键单击Android项目
  2. selectOptions
  3. 转到Android Build
  4. 转到Advanced选项卡
  5. 检查您在模拟器中使用的体系结构(可能是x86 / armeabi-v7a / armeabi
  6. 做一个kickass应用程序:)

@ enl8enmentnow的评论应该是使用genymotion解决问题的答案:

如果您在使用ARM翻译程序时遇到了Genymotion问题,那是因为您正在创build一个x86虚拟设备(如Google Nexus 10),而不是像自定义平板电脑之一那样selectARM虚拟设备。

INSTALL_FAILED_NO_MATCHING_ABIS表示架构不匹配。 如果您在Mac上使用Android Studio(通常使用Apple的ARM),则需要将Android虚拟设备CPU / ABI设置为“arm”或“armeabi-v7a”。 但是,如果您在个人电脑(通常使用英特尔芯片)上使用Android Studio,请将其设置为'x86'或'x86_64'。

Visual Studio的mac – 你可以在这里改变支持:

在这里输入图像说明

对于mac上的genymotion,我在安装apk时遇到了INSTALL_FAILED_NO_MATCHING_ABIS错误。

在我的项目中没有任何“APP_ABI”,但是我相应地添加了它,它为这两种体系结构都构build了一个apk,但是它工作正常。 https://stackoverflow.com/a/35565901/3241111

这个解决scheme为我工作尝试这个,在你的应用程序build.gradle文件中添加以下行

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