Ошибка INSTALL_FAILED_NO_MATCHING_ABIS (res=-113): причины и решение

Ошибка INSTALL_FAILED_NO_MATCHING_ABIS с сообщением «Failed to extract native libraries, res=-113» появляется при установке APK через adb install или вручную, когда внутри пакета нет нативных библиотек, совместимых с архитектурой процессора вашего устройства. Проще говоря, приложение собрано под другой тип процессора — например, вы пытаетесь поставить сборку только под arm64-v8a на устройство или эмулятор с архитектурой x86_64, либо наоборот.

Код res=-113 — это системный код PackageManager, указывающий именно на этап извлечения нативных библиотек (.so-файлов) из APK. Установщик Android проверяет папку lib/ внутри пакета, ищет подпапку с ABI, поддерживаемым процессором, и не находит её — установка прерывается. Ниже разберём, как определить архитектуру устройства, где взять совместимую сборку и что делать, если подходящей версии приложения нет.

Что означает ошибка и почему она возникает

Аббревиатура ABI (Application Binary Interface) описывает, как скомпилированный машинный код взаимодействует с процессором. В Android-экосистеме встречаются несколько основных ABI: armeabi-v7a (32-бит ARM), arm64-v8a (64-бит ARM), x86 и x86_64 (процессоры Intel и AMD, чаще всего — эмуляторы и некоторые планшеты).

Разработчик приложения при сборке включает в APK нативные библиотеки только под те архитектуры, которые решил поддерживать. Если ваше устройство работает на ABI, которого нет в списке, PackageManager не может извлечь нужные .so-файлы и возвращает ошибку INSTALL_FAILED_NO_MATCHING_ABIS с кодом -113.

  • 📱 Установка APK, собранного только под ARM, на эмулятор с архитектурой x86_64 — самый частый сценарий.
  • 🧩 Попытка поставить 64-битную сборку (arm64-v8a) на старое 32-битное устройство (armeabi-v7a).
  • 📦 Скачан «урезанный» APK из стороннего источника, где нативные библиотеки вырезаны ради уменьшения размера.
  • 🔀 Установка не того сплита из split-APK (App Bundle): нативные библиотеки лежат в отдельном конфигурационном APK.

Как узнать архитектуру процессора устройства

Прежде чем искать другую сборку приложения, определите, какие ABI поддерживает ваше устройство. Самый надёжный способ — команда через ADB при включённой отладке по USB:

adb shell getprop ro.product.cpu.abi

adb shell getprop ro.product.cpu.abilist

Первая команда вернёт основной ABI, вторая — полный список поддерживаемых архитектур в порядке приоритета. Например, ответ arm64-v8a,armeabi-v7a,armeabi означает, что устройство 64-битное, но может запускать и 32-битные приложения.

Без компьютера архитектуру можно посмотреть в приложениях-информационных панелях из Google Play, которые показывают параметры процессора. Также многие современные 64-битные чипы поддерживают обратную совместимость с armeabi-v7a, но не наоборот — учитывайте это при выборе APK.

📊 Где вы столкнулись с ошибкой INSTALL_FAILED_NO_MATCHING_ABIS?
На физическом смартфоне
В эмуляторе Android Studio
В BlueStacks или другом эмуляторе
На планшете или ТВ-приставке

Способ 1: найти APK под нужную архитектуру

Самое прямое решение — скачать сборку приложения, в которой есть библиотеки под ваш ABI. На зеркалах вроде APKMirror многие приложения публикуются в нескольких вариантах: рядом с кнопкой загрузки указывается архитектура (arm64-v8a, armeabi-v7a, universal). Выбирайте вариант, совпадающий с выводом getprop.

Универсальные сборки (universal APK) содержат нативные библиотеки сразу под все архитектуры и ставятся на любое устройство, но весят заметно больше. Если доступен только split-вариант (несколько файлов .apks или .xapk), одиночный adb install базового APK не сработает — потребуется установка всего набора.

⚠️ Внимание: скачивайте APK только из источников, которым доверяете. Сторонние сборки могут быть модифицированы, и никакая проверка архитектуры не защитит от вредоносного кода внутри пакета.

Способ 2: установка split-APK и App Bundle

Формат Android App Bundle разбивает приложение на базовый модуль и конфигурационные сплиты: отдельно под языки, плотность экрана и архитектуру процессора. Если вы скачали набор файлов, устанавливать нужно их все одной командой:

adb install-multiple base.apk config.arm64_v8a.apk config.ru.apk

Либо используйте установщики вроде SAI (Split APKs Installer), которые сами подбирают нужные сплиты под ваше устройство. Установка только базового APK без сплита с нативными библиотеками как раз и приводит к ошибке извлечения библиотек.

☑️ Проверка перед повторной установкой APK

Выполнено: 0 / 5

Способ 3: решение для эмуляторов

На эмуляторах ошибка возникает особенно часто, потому что образ по умолчанию обычно x86_64, а многие игры и приложения собраны только под ARM. Вариантов несколько:

  • 🖥️ Создайте в AVD Manager виртуальное устройство с образом arm64-v8a — такие образы доступны для современных версий Android.
  • 🔄 В некоторых эмуляторах (например, BlueStacks, Genymotion) предусмотрен встроенный транслятор ARM→x86; проверьте настройки конкретной программы.
  • 📥 Поищите x86-сборку приложения — разработчики игр иногда публикуют её отдельно.

Имейте в виду: трансляция ARM-кода на x86 заметно снижает производительность, и тяжёлые игры могут работать нестабильно. Это компромисс, а не полноценное решение.

Почему ошибка появилась у приложения, которое раньше работало

Разработчик мог убрать поддержку 32-битных устройств в новой версии или перейти на App Bundle, из-за чего старые сборки перестали обновляться. Проверьте список поддерживаемых ABI в свежей версии — возможно, ваше устройство выпало из списка поддержки.

Диагностика: таблица типовых сценариев

Сопоставьте вашу ситуацию с таблицей — это поможет быстрее выбрать решение.

СитуацияВероятная причинаРешение
Эмулятор x86_64, APK из игрыНет библиотек x86 в пакетеAVD с образом ARM или транслятор
Старый смартфон, новая версия приложенияУбрана поддержка armeabi-v7aНайти старую совместимую версию
Скачан набор .apksУстановлен только базовый сплитinstall-multiple или SAI
APK со стороннего сайтаВырезаны нативные библиотекиСкачать полную/универсальную сборку
⚠️ Внимание: не пытайтесь вручную копировать .so-файлы из чужого APK в системные папки устройства — это требует root, нарушает целостность приложения и часто приводит к падениям из-за несовпадения версий библиотек.

Что делать, если совместимой сборки нет

Иногда разработчик принципиально не поддерживает вашу архитектуру — например, приложение существует только под arm64-v8a, а у вас 32-битное устройство. В этом случае программных способов обойти ограничение нет: несовместимый машинный код процессор выполнить не сможет.

Остаются практичные альтернативы: поискать аналог приложения с поддержкой вашего ABI, использовать веб-версию сервиса в браузере, если она существует, или связаться с разработчиком и уточнить, планируется ли сборка под вашу архитектуру. Для открытых проектов иногда доступна возможность собрать APK из исходников самостоятельно, но это вариант для опытных пользователей.

Частые вопросы

Что значит res=-113 в сообщении об ошибке?

Это числовой код, который PackageManager возвращает при сбое на этапе извлечения нативных библиотек. Он соответствует ситуации, когда в APK не найдено библиотек ни для одного из ABI, поддерживаемых устройством.

Поможет ли очистка кэша или сброс настроек?

Нет. Ошибка связана не с состоянием системы, а с содержимым самого APK: несовместимую архитектуру нельзя «вылечить» очисткой данных. Нужна другая сборка приложения.

Можно ли конвертировать APK из ARM в x86?

Готового безопасного конвертера не существует: нативный код компилируется под конкретную архитектуру на этапе сборки. На эмуляторах используется трансляция в реальном времени, но на физическом устройстве это недоступно.

64-битное устройство запустит 32-битное приложение?

Обычно да: большинство 64-битных ARM-процессоров поддерживают armeabi-v7a. Обратное неверно — 32-битное устройство не запустит сборку arm64-v8a. Проверить список поддерживаемых ABI можно командой adb shell getprop ro.product.cpu.abilist.

Ошибка возникает при установке из Android Studio — что делать?

Проверьте, под какие ABI собран проект: в файле build.gradle может быть задан фильтр abiFilters, исключающий архитектуру целевого устройства. Уберите ограничение или добавьте нужный ABI и пересоберите проект.