Запуск ARMv7 Android-приложений на Android-устройствах только с поддержкой 64-битной архитектуры
Всем привет!
Я начал этот проект, потому что некоторые новые Android-устройства больше не поддерживают 32-битные приложения. Это означает, что приложения, собранные для ARMv7 (armeabi-v7a), больше не могут запускаться на таких устройствах нативно.
Я хотел найти способ обойти это ограничение без root-доступа, кастомной прошивки или запуска второй системы Android.
Armbat — это экспериментальный контейнер для Android-приложений, который позволяет импортировать и запускать 32-битные ARM Android APK на устройствах, поддерживающих только 64-битную архитектуру.
Как это работает?
Вместо эмуляции всей системы Android Armbat использует уже работающую на устройстве среду Android.
Некоторые из основных компонентов:
- Java-код гостевого приложения выполняется на собственном Android ART устройства.
- Нативный ARMv7-код (A32) транслируется в ARM64 с помощью JIT на основе Dynarmic.
- Собственный ELF32-загрузчик отвечает за загрузку и связывание 32-битных нативных библиотек.
- Слой системных вызовов Linux ARM EABI обрабатывает системные вызовы гостевого приложения.
- Настоящий Bionic userspace предоставляет гостевую библиотеку C и динамический линковщик.
- Android-специфичные интерфейсы, такие как JNI, assets, EGL/GLES, ANativeWindow и OpenSLES, связываются с хост-системой.
Проект написан на Kotlin и C++.
Требования
- Android 12 или новее.
- ARM64-устройство (arm64-v8a).
- GPU-драйвер с поддержкой EGL и OpenGL ES 2.0 или новее.
- Разрешение на доступ ко всем файлам.
- Поддерживаются только приложения ARMv7 (armeabi-v7a).
Root-доступ НЕ требуется.
Текущий статус
Armbat всё ещё находится в экспериментальной стадии, и совместимость не является универсальной. Некоторые приложения могут работать, другие могут аварийно завершаться или не запускаться из-за того, что определённые Android-интерфейсы или функции нативных библиотек пока не реализованы.
Это не полноценный эмулятор Android и не виртуальная машина. Armbat не загружает другую систему Android.
Я активно работаю над средой выполнения и улучшением совместимости.
Сайт проекта
Сайт: armbat-web.vercel.app/
Скачать
Последний релиз: github.com/dima-xd/armbat/releases/latest
Исходный код: github.com/dima-xd/armbat
Проект является открытым и распространяется под лицензией Apache License 2.0.
Отзывы и сообщения о совместимости
Буду очень благодарен за тестирование на различных устройствах, особенно на телефонах, которые больше не поддерживают 32-битные приложения.
Нашли ошибку или что-то не работает? Пожалуйста, создайте issue здесь: