Ошибка 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.
Способ 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
Способ 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 и пересоберите проект.