Quick answer: The APK's native libraries do not include the device's CPU architecture. Most often you built only 32-bit ARM (armeabi-v7a) and the device is 64-bit only, or you are installing an ARM-only build on an x86_64 emulator or Chromebook. Enable ARM64 (and x86_64 if you target emulators and ChromeOS) in your engine's Android settings and rebuild.

Game engines ship native code, so an Android build contains compiled libraries for specific CPU architectures. When none of them match the device, Android cannot install the app at all. The error has become more common as phones drop 32-bit support.

The exact error

adb: failed to install game.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

Step 1: compare the APK with the device

# What the device supports
adb shell getprop ro.product.cpu.abilist

# What the APK contains
unzip -l game.apk | grep "lib/"

A modern phone reports something like arm64-v8a (and on some, armeabi-v7a too). The APK lists folders such as lib/arm64-v8a/. If the device list and the APK folders have nothing in common, that is the error. Several recent phones, including newer Pixel models, are 64-bit only and cannot run armeabi-v7a-only apps.

Step 2: enable the right architectures

Google Play also requires 64-bit libraries for apps with native code, so ARM64 is not optional for store builds anyway.

Step 3: plugin libraries that only cover one ABI

A third-party plugin (an ads SDK, an analytics library, an old native plugin) may only ship .so files for one architecture. Android installs the app using one ABI folder, so mismatched plugin libraries either cause this error or a crash at startup with UnsatisfiedLinkError. Update the plugin, or check its folders for the architectures you build.

Emulators and Chromebooks

Android emulator images on PCs are usually x86_64. Recent images can translate ARM code, but not all do and performance suffers. Either build x86_64 for emulator testing, or use an ARM64 system image on Apple Silicon Macs. Chromebooks with Intel or AMD processors need x86_64 libraries for the best experience.

App bundles

An Android App Bundle (.aab) contains every ABI you built, and Google Play delivers the right one to each device. You cannot install an .aab with adb install; generate APKs from it with bundletool build-apks for local testing, and make sure the bundle includes arm64 libraries.

Devices you never tested

Architecture problems are a classic “works on my phone” bug. Bugnet imports your Google Play and App Store reviews every hour with device and OS details, files one- and two-star reviews that describe a bug as reports automatically, and its SDKs for Unity, Godot and Unreal mobile builds capture errors with the device attached.

Frequently asked questions

What does INSTALL_FAILED_NO_MATCHING_ABIS mean?

The APK has no native libraries for any CPU architecture the device supports, so Android cannot install it.

How do I fix INSTALL_FAILED_NO_MATCHING_ABIS in Unity?

Switch the scripting backend to IL2CPP and tick ARM64 under Target Architectures in Player Settings, then rebuild. Add x86-64 for emulators and ChromeOS.

Why can’t newer phones install my 32-bit Android build?

Some recent phones are 64-bit only and cannot run armeabi-v7a libraries. Build arm64-v8a.

arm64-v8a is the default now. Build it first and treat 32-bit as the extra.